尚学堂android开发常用错误集_第1页
尚学堂android开发常用错误集_第2页
尚学堂android开发常用错误集_第3页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.23.在使用AndroidHttpClient时有如下错误:01-16 22:18:39.222: E/AndroidHttpClient(26745): java.lang.IllegalStateException: AndroidHttpClient created and never closed这个主要是因为没有调用AndroidHttpClient的close()方法。它的close()方法如下:12345678910/*Releaseresourcesassociatedwiththisclient.Youmustcallthis,*orsignificantresources

2、(socketsandmemory)maybeleaked.*/publicvoidclose()if(mLeakedException!=null)getConnectionManager().shutdown();mLeakedException=null;在我们的使用中在finally语句块中调用其close方法即可。12345finallyif(httpClient!=null)httpClient.close();最后更新:2012111223,在使用一个FrameLayout作为容器时,将一个Frament实例动态添加进布局时,出现如下错误提示:The specified chil

3、d already has a parent. You must call removeView() on the childs parent first.解决办法就是:在12345678OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState)Log.i(DIALOG_FRAGMENT,=(3)onCreateView=);Viewview=inflater.inflate(R.layout.auth,container,false);initViews(

4、view);returnview;中,使用,注意带参数falseView view = inflater.inflate(R.layout.auth, container, false);22.android:filterTouchesWhenObscuredview所在窗口被其它可见窗口遮住时,是否过滤触摸事件。结果因为有些应用会在界面的上面加一层,导致软件不可滑动。所以。最后更新 2012-04-2821.接下面的错误:1234567891011121314151617181920212205-1016:16:23.830:W/dalvikvm(15086):threadid=1:thre

5、adexitingwithuncaughtexception(group=0x40a4b1f8)05-1016:16:23.860:E/AndroidRuntime(15086):FATALEXCEPTION:main05-1016:16:23.860:E/AndroidRuntime(15086):java.lang.IllegalStateException:Activityhasbeendestroyed05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.support.v4.app.FragmentManagerImpl.enque

6、ueAction(FragmentManager.java:1314)05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.support.v4.app.BackStackRecord.mitInternal(BackStackRecord.java:541)05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.support.v4.app.BackStackRecord.mitAllowingStateLoss(BackStackRecord.java:529)05-1016:16:23.

7、860:E/AndroidRuntime(15086): at.ditouch.client.activity.BaseFragmentActivity.removeFragmentDialog(BaseFragmentActivity.java:129)05-1016:16:23.860:E/AndroidRuntime(15086): at.ditouch.client.activity.BaseFragmentActivity.removeFragmentDialog(BaseFragmentActivity.java:114)05-1016:16:23.860:E/AndroidRun

8、time(15086): at.ditouch.client.guilin.DiTouchClientActivity.access$1(DiTouchClientActivity.java:1)05-1016:16:23.860:E/AndroidRuntime(15086): at.ditouch.client.guilin.DiTouchClientActivity$ConnectServerTask.onPostExecute(DiTouchClientActivity.java:299)05-1016:16:23.860:E/AndroidRuntime(15086): at.dit

9、ouch.client.guilin.DiTouchClientActivity$ConnectServerTask.onPostExecute(DiTouchClientActivity.java:1)05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.os.AsyncTask.finish(AsyncTask.java:602)05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.os.AsyncTask.access$600(AsyncTask.java:156)05-1016:16

10、:23.860:E/AndroidRuntime(15086): atandroid.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.os.Handler.dispatchMessage(Handler.java:99)05-1016:16:23.860:E/AndroidRuntime(15086): atandroid.os.Looper.loop(Looper.java:137)05-1016:16:23.8

11、60:E/AndroidRuntime(15086): atandroid.app.ActivityThread.main(ActivityThread.java:4424)05-1016:16:23.860:E/AndroidRuntime(15086): atjava.lang.reflect.Method.invokeNative(NativeMethod)05-1016:16:23.860:E/AndroidRuntime(15086): atjava.lang.reflect.Method.invoke(Method.java:511)05-1016:16:23.860:E/Andr

12、oidRuntime(15086): ernal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)05-1016:16:23.860:E/AndroidRuntime(15086): ernal.os.ZygoteInit.main(ZygoteInit.java:551)05-1016:16:23.860:E/AndroidRuntime(15086): atdalvik.system.NativeStart.main(NativeMethod)在此有说是因为Fragm

13、entManager自己是在onCreate中初始化的所以要把fragment的操作放到后面去:stackoverflow./questions/6938368/why-do-i-get-illegalstateexceptions-every-time-i-start-an-activity-that-uses-sup20. 在debug带有android.support.v4的包时,结果出现下面的错误:05-10 15:47:09.850: E/AndroidRuntime(12744): java.lang.IllegalStateException: Can not perform t

14、his action after onSaveInstanceState比较完整的stack如下:1234567805-1015:47:06.470:W/dalvikvm(12744):threadid=1:threadexitingwithuncaughtexception(group=0x40a4b1f8)05-1015:47:09.850:E/AndroidRuntime(12744):FATALEXCEPTION:main05-1015:47:09.850:E/AndroidRuntime(12744):java.lang.IllegalStateException:Cannotper

15、formthisactionafteronSaveInstanceState05-1015:47:09.850:E/AndroidRuntime(12744): atandroid.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)05-1015:47:09.850:E/AndroidRuntime(12744): atandroid.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)05-10

16、15:47:09.850:E/AndroidRuntime(12744): atandroid.support.v4.app.BackStackRecord.mitInternal(BackStackRecord.java:541)05-1015:47:09.850:E/AndroidRuntime(12744): atandroid.support.v4.app.BackStackRecord.mit(BackStackRecord.java:525)05-1015:47:09.850:E/AndroidRuntime(12744): atandroid.support.v4.app.Dia

17、logFragment.show(DialogFragment.java:123)在此处有人也一个有点类似问题:stackoverflow./questions/7575921/illegalstateexception-can-not-perform-this-action-after-onsaveinstancestate-h我看到上面有提到onSaveInstanceState(),于是就重写了下这个.像上面说的不能调用super.我调用了,而且居然就tmd没有错误提示了.19.05-10 16:08:43.190: E/AndroidRuntime(14243): java.lang.

18、IllegalStateException: addToBackStack() called after mit()18.在使用android.support.v7.widget.GridLayout时出错:参考:stackoverflow./questions/10133078/assistance-please-setting-up-android-support-package-v7-for-eclipse-gridlayou其中有两个重要的特点:1.要将android-support-v7作为一个库引用项目.然后使用全名.然后,还是要将android-support-v7作为一个库项目

19、,来处理,命名空间等待.17. android.database.sqlite.SQLiteException: unable to close due to unfinalised statements这个我自己的是在一个网络出现异常,所以没有按顺序执行close(),解决办法是添加finally语句并执行close()语句.(2012-04-23)16.04-23 14:50:08.344: E/AndroidRuntime(28034): Caused by: java.lang.IllegalStateException: Fragment .ditouch.client.activi

20、ty.EditMenuxFragment did not create a view.在使用Fragment中出现上面的错误,我是照着Google Android的文档来做的.错误的原因是我将FrameLayout看成了fragment想当然了.15.android.util.AndroidRuntimeException: requestFeature() must be called before adding content在为AlertDialog中使用自定义布局时,在Builder中调用了create()后不小心在使用了setContentView()事实上也不应该在使用setCon

21、entView了.因为如果先设置了这个会与后面添加产生冲突.14.android.view.WindowManager$BadTokenException: Unable to add window - token null is not for an application原来及解决办法:导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activi

22、ty才能添加一个窗体。Thanks to :13. 在使用AlertDialog中,使用了如下代码.1234returnnewAlertDialog.Builder(this).setTitle(提醒!).setMessage(args.getString(MESSAGE).setCancelable(false)但是,实际使用我发现,如果我是在Activity中托管使用这个的话,在整个Acitivty生命周期中只创建一次,所以,args.getString()就只能得到第一次得到内容.解决办法是使用onPrepareDialog(),现在知道为什么要这样子设计了.12345678910111

23、213OverrideprotectedvoidonPrepareDialog(intid,Dialogdialog,Bundleargs)AlertDialogaDialog=(AlertDialog)dialog;switch(id)caseDIALOG_FIRE_ALL_ORDER:aDialog.setMessage(args.getCharSequence(MESSAGE);break;caseDIALOG_DELETE_ORDER_NON_FIRED:aDialog.setMessage(args.getString(DISH_NAME);default:break;12.在Lis

24、tView的适配器中出现:java.lang.IndexOutOfBoundsException: Invalid index 32, size is 23原因是我在getView()中使用了.mCheckBoxList.add(position, holder.check);解决办法是,使用:mCheckBoxList.add(mCheckBoxList.size(), holder.check);11.NetworkOnMainThreadException当我把targetSdkVersion设置为11时,我原来在UI线程执行网络操作的代码就会出现上面的异常,解决办法是使用AsyncTa

25、sk来网络操作.或者使用其他的网络库如Volley,10.close() was never explicitly called on database04-12 17:19:34.020: E/SQLiteDatabase(2743): close() was never explicitly called on database /data/data/*.db这个在我使用完SQLiteOpenHelper的子类对象之后调用close()方法没有报这个错了. Thanks to :stackoverflow./questions/4464892/android-error-close-was

26、-never-explicitly-called-on-database9.在使用SQLiteOpenHelper时出现这样一个错误:Cant upgrade read-only database from version 0 to 104-12 16:59:11.230: E/AndroidRuntime(2119): android.database.sqlite.SQLiteException: Cant upgrade read-only database from version 0 to 1: /data/data/databases/*.db从输出的log中我发现现在这个错误的时

27、候,同时前面会有一个sql语法错误.解决办法是根据提示,仔细检查sql语句看是否有错误.8.在UI线程中开了一个线程来初始化一个ViewFlipper.导致下面的错误 :04-10 14:08:36.356: E/AndroidRuntime(26716): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.解决办法使用post方法将操作post过去 :12345678910111

28、2131415ToastUtils.showLong(this,正在加载楼层数据.);newThread(newRunnable()Overridepublicvoidrun()for(StringfloorId:FLOOR_NUMS)finalListtables=TableDao.findByFloorId(floorId);mFloorFlipper.post(newRunnable()Overridepublicvoidrun()buildFloorView(tables););).start();7.在使用LayoutInflater.inflate()时经常被第地个参数给搞定了.我

29、是在适配器上使用的:123publicViewgetView(intposition,ViewconvertView,ViewGroupparent)if(convertView!=null)returnconvertView;Viewview=mInflater.inflate(R.layout.menu_item,parent);错误信息如下:04-02 02:49:06.322: E/AndroidRuntime(494): java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not suppor

30、ted in AdapterView应该改成下面这样 :mInflater.inflate(R.layout.menu_item,parent,false);因为我们需要使用parent来帮助构造LayoutParams,但不是要添加进parent6.在使用SharedPreferences的时候,使用了getPreferences().但是这个是只供本Acitivity使用的.如果在本应用的其它activity中共享这些设置,就要使用getSharedPreferences();5.第四个错误说到,要在每一个ListView中的项中实现,手势滑动判断,删除功能.但是如果没有设置背景图片或者背

31、景色的时候,当手滑动区域超过一个ListView的项时,就会出现ListView项背景反色,很是让人讨厌,一开始我以为是因为,ListView项,获得了焦点的原因,就尝试在项中的GestureOverlayView中及在其中的TextView的onTouch方法中如果MotionEvent的action为down的话,就返回true,这个系统就不会处理高亮反色了,但是其实不是这样的,到底是怎么样的呢目前还不清楚,我的解决办法是在GestureOverlayView中设置一X背景图片.就OK了.就算这个ListView中各个项高亮反色了.也不会影响.错误设置代码如下,处理高亮还是不要这样用了-在

32、这样的场景下:12345678910111213privatestaticclassIgnoreTouchListenerimplementsView.OnTouchListenerOverridepublicbooleanonTouch(Viewv,MotionEventevent)Log.i(TAG,Ignoretouch+v.getClass()+,+event.getAction();switch(event.getAction()caseMotionEvent.ACTION_DOWN:returntrue;default:break;returnfalse;4. 现在的一个需要是要在

33、一个ListView的项中滑动时,就表示删除其中一个项.开始用GestureDetector但是,弄了很久还是没有反应.所以作罢,关键在一个项中,我喜欢滑动的时候能够有像用笔画线一样的效果.ListView中的项对应布局文件如下 :(名为:orderlist_item.xml)1234567891011121314151617181920开始尝试:这样:123GestureOverlayViewgestures=(GestureOverlayView)findViewById(R.id.gestures);gestures.addOnGesturePerformedListener(this)

34、;但是这样会报空指针错误,就是取不到gestures.但是我帮android的示例项目也是这样的.android资源中文章:docs/resources/articles/gestures.后来我想了一下,在android中的示例项目中,这是一唯一的一个文件,但是在我的使用场景中这样的一个文件在ListView中重复使用了,想起来这样的一个ID也会在上面存在多个.于是用R.id.gestures是找不到了,就算用R.layout.orderlist_item也找不到.于是我就在自己实现的BaseAdapter中的View来处理这样的逻辑了:123456789101112131415161718

35、OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent)Viewview=null;if(convertView=null)view=mInflater.inflate(R.layout.orderlist_item,null);TextViewtextView=(TextView)view.findViewById(R.id.order_list_item_text);Mapmap=(Map)mData.get(position);StringitemText=(String)map.get(ITEM_TEX

36、T);textView.setText(itemText);view.setTag(mData.get(position);GestureOverlayViewgestures=(GestureOverlayView)view;gestures.addOnGesturePerformedListener(ClientStationActivity.this);returnview;其中处理在主Activity中实现的OnGesturePerforedListener接口,其中处理方法如下 :12345678910111213OverridepublicvoidonGesturePerforme

37、d(GestureOverlayViewoverlay,Gesturegesture)ArrayListpredictions=mLibrary.recognize(gesture);if(predictions.size()1)return;if(predictions.get(0).score0.27)return;Stringaction=predictions.get(0).name;Log.i(TAG,action:+action+,+predictions.get(0).score);Mapmap=(Map)overlay.getTag();StringitemText=(String)map.get(ITEM_TEXT);/TODO完成删除上面的代码有一个要注意的地方就是.通过实际的手势来判断看你认为的一个比较正确的手势的score得分是多少.3.不能在android项目中运行Java程序.有时候想运行测试一下一个简单的Java方法,但是呢今天发现了这样一个问题:然后我就想通了.报告错误如下 :1234567891011121314*AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment:*Inte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论