Android-android仿新浪微博App错误笔记

本人是android新手,想自己写个app练手,此篇博文记录一下项目中碰到的问题以及解决方法,希望自己从中能有所长进。因为已经错过了很多,所以错误顺序不是开发顺序。

 

1.java.lang.IllegalStateException: ScrollView can host only one direct child

解决方法:ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLayout内部或RelativeLayout等其他布局方式中。

 

2.关于如何引用开源项目

解决方法:http://www.devnote.cn/article/266.html  关于这两种引用方法,第一种,很易于操作,但是把代码传出来,需要把引用到的项目都一起传出来。第二种方法可以避免这种麻烦(他这里是把开源代码打包成jar,如果代码不是很多的话可以把代码拷贝到自己的项目,需要的资源文件也一并拷到自己的项目中)。

 

3.Unable to execute dex:Multipe dex files define

解决方法:http://blog.csdn.net/mxlxiao7/article/details/8978930  我参考的这篇博客 我遇到的是第六种情况,我把libs文件夹 右键->BUILD PATH->Use as source folder 这样也导致了重复引用,解决方法是右键项目->properties->java bulid path->source 把libs目录移除掉即可。

 

4.SQLiteOpenHelper 操作数据库疑惑

疑惑:一开始不太明白onCreate的调用时机,参考了几篇博客后了解到它是在实例化SQLiteOpenHelper类或者是你自己重写的这个类的子类时会把name参数做相关检测,如果没name这个数据库,此时会调用onCreate。如果之前传入的version为1。下次传个大于1的数,它会检测到版本发生变化,此时会调用onUpgrade。

注:一般版本发生变化后,数据库结构发生变化时,要保存原表的数据,这时要备份,我的程序这边因为只有一列数据,我在onUpgrade函数中把原表删除,重新建了个表

 

5.RotateAnimation实现匀速旋转的效果

注:RotateAnimation rotateAnimation  = new    RotateAnimation(0f,359f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f );

rotateAnimation.setDuration(500);

这样设置后每转完一圈会有一个明显的卡顿。

解决方法:359f----->35900f  rotateAnimation.setDuration(50000);原来是1秒(即1000毫秒)转360度,那么可以改成100秒(即100000毫秒)转36000度。在100秒钟后才重启一次,重启时的卡顿效果基本上就可以忽略了。

 

6.listview中我加了许多数据,但是只显示一条数据

错误原因:我的布局文件listview外面嵌套了一层scrollview,只要把scrollview去掉就好,但是我这样做为什么会引起这种错误还不清楚

 

7.tabActivity以及子activity的生命周期

疑惑:我写的微博是用的tabactivity,虽然被遗弃了,但是因为没有用过fragment,所以暂时不考虑换。可能以后会换成fragment。这里我碰到的问题是我自己重写了actionbar,在每个子Activity 的onCreate里面绘制,但是tabActivity在切换tab的时候各个子Activity的onCreate只会调用一次,这样actionbar就会出现错乱。

解决方法:切换tab只会调用子Activity的onResume生命周期函数,所以actionbar写在onresume中就好。

 

8.It is indirectly referenced from required .class file

解决方法:你正要使用的类调用了另一个类,而这个类又调用了你正在使用的这个类,因为我用的开源库,把部分文件打成jar包了,主要测试类没打。而是把它复制到项目中了,导致用的时候,jar包里依赖它的文件出错,解决方法就是全部考到项目中。。

 

9.Unable to find app for caller android.app.ApplicationThreadProxy

解决方法:引起这个错误的原因,是因为intent中加了太多东西,比如加了一个图片,可以考虑其他方式实现。

http://stackoverflow.com/questions/18096607/using-crop-intent-getting-java-lang-securityexception-unable-to-find-app-for-ca

 

10.TabActivity中无法使用BindService

解决方法:纠结了一下午,不知道是什么引起的这个错误 Connection一直获取不到,在单独的activity中都可以获取到,后来想可能是这方面的原因,一查果然。解决方法是在bindService 和unbindService的地方都加上 getApplicationContext().bindService 先获取上下文环境才能正常绑定

 

11.android.content.res.Resources$NotFoundException: String resource ID #0x1

错误原因:textview的setText(int resid)重载方法,参数如果传一个int的值,他会把这个值当作resource的id去工程目录下找,结果就会报错。

解决方法:int值后面+"",强制转为String。或者int值转换为String或者CharSequence

 

12.微博字符串处理

话题正则匹配:#([a-zA-Z0-9-_\u4E00-\u9FA5]*)# 

@的人正则匹配:@[a-zA-Z0-9-_\u4E00-\u9FA5]+  

表情正则匹配:(\\[([a-zA-Z\u4E00-\u9FA5]*)\\]) 

网页正则匹配用的text自带的autolink属性但是发现它有时候会解析出错,暂时还没手动匹配。

split函数:如果没有匹配到则会返回全部字符串,且数组长度为1,如果是这种   aaa[b]  要匹配[b] 只会返回aaa,且数组长度也为1,所以要区分这两种情况 ,我处理的方法就是在传入字符串之前,先做一些处理 "]"后加空格  正则匹配到的话题后面加空格 也就是”#“后面加空格 ,这样就会避免数组越界。

 

13.实现固定在屏幕底部的工具栏

解决方法:用线性布局,上面放一个scrollview并设置它的weight为1,想固定的放在下面即可

 

<LinearLayoutt>

<ScrollView
   android:layout_weight="1">

</ScrollView>

<Button android:layout_alignParentBottom="true"/>

</LinearLayout>

 

 

 

 

 

14.moveToFirst和moveToNext

错误情况:我先用moveToFirst判断是否有记录,然后在用while(moveToNext)取数据,发现怎么取都会少一个数据,第一条数据总是取不到,不知道为什么

解决方法:把循环换成这个for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())   其实我并不是很理解,因为moveToNext是从第0个开始的,为什么会少一条数据,还有待求证

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章