Android错误汇总集锦

1、java.lang.IllegalArgumentException: column 'XXX' does not exist

1.1 写数据库时提示字段不存在,具体错误信息如下:

FATAL EXCEPTION: main                                                        

java.lang.IllegalArgumentException: column 'org_name' does not exist         

at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.j

at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.jav

at com.linkage.educloud.ah.widget.ChatListItem.init(ChatListItem.java:119

at com.linkage.educloud.ah.fragment.NewMessageFragment$ThreadAdapter.newV

at android.widget.CursorAdapter.getView(CursorAdapter.java:246)          

at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.jav

at android.widget.AbsListView.obtainView(AbsListView.java:2425)          

at android.widget.ListView.makeAndAddView(ListView.java:1769)            

at android.widget.ListView.fillDown(ListView.java:672)                   

at android.widget.ListView.fillFromTop(ListView.java:733)                

at android.widget.ListView.layoutChildren(ListView.java:1608)            

at android.widget.AbsListView.onLayout(AbsListView.java:2260)            

at android.view.View.layout(View.java:13846)                             

at android.view.ViewGroup.layout(ViewGroup.java:4498)                    

at android.widget.FrameLayout.onLayout(FrameLayout.java:448)             

at android.view.View.layout(View.java:13846)                             

at android.view.ViewGroup.layout(ViewGroup.java:4498)                    

at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)     

at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)    

at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)          

at android.view.View.layout(View.java:13846)                             

at android.view.ViewGroup.layout(ViewGroup.java:4498)                    

at android.widget.FrameLayout.onLayout(FrameLayout.java:448)             

at android.view.View.layout(View.java:13846)                                                 

·····

1.2 可能发生原因及修改方法:

1)DB中该字段不存在

      解决方法:

      a、检查数据库的创建/插入是否存在错误。

      b、数据库版本是否升级。如果是在已经安装过老版本db的机器上运行新版本DB,如果version不升级,默认是用原来的DB


2)从DB检索数据时,筛选字段的集合没有包含该字段

      解决方法:

      在筛选字段collectiong是否包含该字段即可(我的就是这个原因)


2、在Listview的子布局中添加Button后,Listview 的onItemClick事件就不响应了

2.1 解决方法

将具有点击事件控件的android:focusable属性置成false就可以了,(如这里就是按钮的控件,只要把按钮的控件的android:focusable属性置成false);这样可以既捕捉onItemClick事件(在非button区域),又可以捕捉onClick等事件


3、发送一次广播,接收端却接收到多次

3.1 原因

大部分情况是广播没有随Activity销毁unregisterReceiver,重新创建Activity时,又重新注册了一个,导致Activity绑定了多个BroadcastReceiver。

3.2 解决方法:

在activity的onDestroy 或 onPause中等地方,unregisterReceiver BroadcastReceiver。

注意,虽然在Activity的生命周期unregisterReceiver ,但也要保证这段代码确实执行了,我遇到这个问题的原因就是虽然在OnDestroyunregister,但在账号切换时,没有销毁不用的页面,导致出现这个问题。


4、ImageView执行完旋转动画后,隐藏不了

4.1 问题描述

ImageView执行完旋转动画后,设置setVisibility(View.GONE)后,ImageView还是可见的。

4.2 原因解决方法

ImageView上面的动画没有清除导致,先清楚view上的clearAnimation(),再设置visibility即可。


5、Js回调Android的方法中更新页面显示出现异常

5.1 问题描述

Js回调Android的方法中更新页面显示时发生异常,具体异常信息如下:

W/System.err(5617): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.                                                                                                                 
W/System.err(5617): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6118)                                             
W/System.err(5617): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:848)                                            
W/System.err(5617): at android.view.View.requestLayout(View.java:16431)                                                          
W/System.err(5617): at android.view.View.requestLayout(View.java:16431)                                                          
W/System.err(5617): at android.view.View.requestLayout(View.java:16431)                                                          
W/System.err(5617): at android.view.View.requestLayout(View.java:16431)                                                          
W/System.err(5617): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:352)                                      
W/System.err(5617): at android.view.View.requestLayout(View.java:16431)                                                          
W/System.err(5617): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:352)                                      
W/System.err(5617): at android.view.View.requestLayout(View.java:16431)                                                          
W/System.err(5617): at android.widget.TextView.checkForRelayout(TextView.java:6600)                                              
W/System.err(5617): at android.widget.TextView.setText(TextView.java:3813)                                                       
W/System.err(5617): at android.widget.TextView.setText(TextView.java:3671)                                                       
W/System.err(5617): at android.widget.TextView.setText(TextView.java:3646)                                                       
W/System.err(5617): at com.linkage.educloud.js.app.BaseActivity.setTitle(BaseActivity.java:157)                                  
W/System.err(5617): at com.linkage.educloud.js.activity.SubscribeActivity$InJavaScript.openFriendInf(SubscribeActivity.java:234) 
W/System.err(5617): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)                     
W/System.err(5617): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)            
W/System.err(5617): at android.os.Handler.dispatchMessage(Handler.java:102)                                                      
W/System.err(5617): at android.os.Looper.loop(Looper.java:136)                                                                   
W/System.err(5617): at android.os.HandlerThread.run(HandlerThread.java:61)                                                       


5.2 原因及解决方法

log提示的意思是只能在主线程中更新UI,因为JS代码不是在主线程运程的,所以不能直接在JS的回调方法中更新Android的页面显示。

知道原因了,解决方法很简单:在回调中用利用Handler将要处理的方法post到主线程中处理。

eg:

private Handler mHandler = new Handler();

// JS回调类
final class InJavaScript {
    @JavascriptInterface 
	public void openFriendInf(final String id) {
		
		mHandler.post(new Runnable() {

			public void run() {

			//具体处理
				
			}

		});

	}  
}


6、listview点击两次才响应onclick方法

6.1 问题描述

在调试眼镜上开发APP时,发现在点击listview的一个 item时,点击第一下没有没有反应,再点击一次才会响应onclick事件,如果不切换光标,还在同一个item点击,即:第三次点击时,会立即触发onclick事件,但切换光标,在下一个或上一个item上点击,同样必须连续点击两下才触发 onclick,之后每次点击都会立即触发onclick。

6.2原因及解决方法

通过上面分析发现只要切换光标的位置,就会发生连续点击两次才能触发onclick,猜测与光标有关。
检查布局发现在item的字布局的根RelativeLayout存在两个属性:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:id="@+id/rly"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:clickable="true"
    android:background="@drawable/rt_rly_bg">

注意如下两个属性:
 android:focusable="true"
 android:focusableInTouchMode="true"

那么,这两个属性有什么区别?
it's a long story....这个得从手机的发展说起……
在非触屏手机时代,需要使用键盘的上下左右去选中某个应用,然后再点击确定执行对应的操作,比如现在的机顶盒操作就是如此。
而触屏手机,可以做到“眼到手到”,我们只需要在要点击的地方,轻轻点击一次,即可直接触发,无需焦点。

于是就衍生出了两个属性:
android:focusable 与 android:focusableInTouchMode

前者针对在键盘下操作的情况,如果设置为true,则键盘上下左右移动,焦点会随之移动。
而后者,则是针对触屏的,让我们可以做到点击屏幕的上的某个控件时,不立即执行相应的点击逻辑,而是先显示焦点(即控件被选中),再次点击时才执行逻辑。

那么这两个有什么关系呢?

android:focusable="true" 不会改变 android:focusableInTouchMode,因此只在键盘状态下显示焦点,在TouchMode状态下,依旧无法显示焦点。
android:focusable="false",一定会使 android:focusableInTouchMode="false"。

相对的

android:focusableInTouchMode="false",不会影响 android:focusable。
android:focusableInTouchMode="true",一定会使 android:focusable="true"

有点绕。
但记住关键一点:
对于现在触屏手机而言,如果要明确显示获取焦点的状态,我们只需要设置android:foucusableInTouchMode="true"就可以了
同样,如果想让APP在按键操作的设备上,有focus的状态,只需要设置android:focusable="true"即可

而我这里发生问题的原因是没有明白这两个属性的区别,顺手将两个属性都设置了true,从而导致了问题的发生。

当然要想获取焦点,前提就是该控件必须默认是可获取焦点,例如各种layout默认是不能获取焦点的,如果要想使其能获取焦点,要么是在布局文件中设置android:clickable="true",要么直接在代码中设置监听onclick,两种都可以。



------------------------------->>待续

参考资料:

http://blog.csdn.net/csdn_susan/article/details/46651557

http://blog.csdn.net/chaoyu168/article/details/51899718

在调试眼镜上开发APP时,发现在点击listview的一个 item 时,点击第一下没有没有反应,再点击一次才会响应onclick事件,如果不切换光标,还在同一个item点击,即:第三次点击时,会立即触发onclick事件,但切换光标,在下一个或上一个item上点击,同样必须连续点击两下才触发 onclick,之后每次点击都会立即触发onclick。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值