其他分享
首页 > 其他分享> > 在Andorid开发项目中遇到的Bug记录(续)

在Andorid开发项目中遇到的Bug记录(续)

作者:互联网

原文链接:http://www.cnblogs.com/David-Young/p/4451434.html

[22]遇到query cannot be resolved to a variable错误,

解决:1.Java里面定义的变量不能跟系统包里面的关键字相同(大小写不同也不行),系统包里面有个Query,把query改 2.变量在方法中是否被定义为局部变量,从而不能作为方法的返回值成其他名字即可

[23]Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl

解决:

[24]java.lang.reflect.InvocationTargetException

解决:

[25]java.net.ConnectException: failed to connect to /***.***.***.***(port 80): connect failed: EHOSTUNREACH (No route to host)

解决:网络虽然连接,但是网络阻塞,断开重连

[26]android.widget.TextView cannot be cast to android.widget.CheckBox

解决:布局文件中TextView控件被覆盖,

[27]java.lang.RuntimeException: Parcel: unable to marshal value {CLASSNAME}

解决:用Intent跳转Activity时,出现这个错误,intent.putExtra("siteInfo", (Serializable)listSiteInfo);这行代码调试通过,但是不能实现跳转,抛出错误,原因是listSiteInfo是我自己定义类型为SiteInfo的一个Arraylist,SiteInfo这个类必须要继承Seralizable,才能转换成(Serializable)类型。

[28]在监听事件里面执行异步类AsyncTask的代码,如果想要将异步类执行后的结果获取到,然后在监听事件里面继续执行后面的代码,这是不可取的,因为异步类AsyncTask和你的监听之间后面的代码同时运行,如果后面的代码需要用到异步类里面返回的结果后再执行,是不行的,因为等异步类里面的代码执行的时候,监听事件里面后面的代码可能已经执行完了,所以最好是把后面需要执行的代码写到AsyncTask异步类里面的PostExecute里面执行

[29]android.view.WindowManager$BadTokenException: Unable to add window -- token

解决:导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。 将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity是你的Activity的名称)来填充就可以正确的创建一个Dialog了

[30] java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常

解决 不能实例化activity有如下三种情况: 1.没有在Manifest.xml 清单中注册该activity,或者在创建完activity后,修改了包名或者activity的类名,而配置清单中没有修改,造成不能实例化。 2.自己新建了一个包,而注册时候依然用的默认包,例如,默认包是com.ghg.Dao包,你新建了一个com.ghg.DaoImpl包,并在此包中写了个FirstActivity,在manifest.xml中注 册时你写的是<activity  android:name=".FirstActivity"/>,此时相当于你在的类注册到了默认包中,系统在默认包中是找不到的,因为你的FirstActivity在com.ghg.DaoImpl包 下,所以你注册时应写成包名加类名,如:<activity android:name="com.ghg.DaoImpl.FirstActivity";这样系统才能在指定的包中找到对应的类。 3.还用一种就是你的FirstActivity定义成了抽象类,这种情况好像一般人不会犯。 如果上述三种情况都考虑到了,还会抛出此异常,那么就查看一下activity类里是否同时存在这个类的构造函数和oncreate(),如果是,那么删除构造函数试试,并把初始化放到 oncreate()中试试。

[31]android.content.res.Resources$NotFoundException: String resource ID #0x0 找不到资源文件ID #0x0

原因分析如下: 遇到这种情况,很有可能是把一个int型业务数据的 设置setText()或者类似的方法中, 这样Android系统就会主动去资源文件当中寻找, 但是它不是一个资源文件ID, 所以就会报出这个bug。 将int型业务数据,转换成String类型即可。

[32]使用Spinner控件时,必须要给spinner绑定数据,否则报空指针的错误,空值

[33.]不显示系统菜单

解决:把manifest中的android:targetSdkVersion去掉,看看显不显示menu

[34]使用最新版本的androidsdk(4.x)和adt插件时,新建android工程时红叉和感叹号 使用adtbundle 20150202版本,最低版本选4.0以上

[35]eclipse的 Invalid project description. overlaps the location of another project

解决:下载工程时把该工程放在了workspace目录下。eclipse插件在创建项目的时候需要在workspace目录下创建一个同名的目录。 但发现workspace目录下已存在对应的目录时,就会报上面的处错误信息了,把项目拷贝到其他文件及再导入

[36]多媒体应用开发,用Intent调用手机摄像头拍照和摄像时,如果在传Intent时指定了MediaStore.EXTRA_OUTPUT的Uri(文件保存位置),那么在onActivityResult里面返回的data的可能为null

解决:这是不同手机机型的问题,方案:1,不手动指定保存路径,让系统自动默认保存 2.手动指定路径,声明一个全局变量uri保存路径,在onActivityResult里面不能用data.getData()方法获取uri

[37]使用fragment里面的控件绑定onclicklistener点击事件无效

解决:使用fragment或者fragmentactivity时,为在继承fragment类的自定义类里面的控件设置点击事件监听必须要在fragment那个类里面的onActivityCreated方法里面去给控件绑定监听,在fragmenet类里面可以用getactivity()方法获得fragment所在的activity

[38]解除EditText控件自动获取焦点

解决:在EditText的父控件中设置focusable和focusableintouchmode为true

[39]error: Error parsing XML: unbound prefix

解决:自定义控件在attrs.xml添加自定义属性时,在布局文件中使用自定义控件,标签名应该为自定义控件所在的包名加上类名,另外,还要在引入自定义控件的xmlns命名空间(xmlns:自定义属性名="http://schemas.android.com/apk/res/包名"(主类所在包名/自定义控件类包名?)

[40]java.lang.NoClassDefFoundError: android.support.v4.view.MotionEventCompat

解决:android.support.v4.util.SparseArrayCompat,这个问题很奇怪,JAR包也有了,编译也通过了。但就是运行时出现类找不到的问题。NoClassDefFoundError这种错误一般就是对应的类,没有被包含在对应的APK里面。 而MotionEventCompat这个类属于android.support.v4扩展库.检查了一下项目Libraries目录,发现没有引入这个包,右键项目属性-BuildPath-Libraries-Add External Jar,找到adt插件文件下面的D:\eclipse\adt\sdk\extras\android\support\v7\appcompat\libs的v4包,然后在order and Export里面给v4勾上,问题解决.(低版本的adt,右键项目属性,把【Android Private Libraries】前面的勾选中,再clean工程,再编译运行)

[41]Unable to execute dex: Multiple dex files define Landroid/support/annotation

解决:在项目中,有一个类的包名和引用的jar包中的类和包名一致,我用的是jar包中的类,所以工程中的这个类就是重复引用的,删除工程中重复引用的类后,成功打包启动

[42]布局文件A中,使用<include layout="@layout/mylayout"  />标签时,可以通过A直接findviewbyid找到mylayout上的控件并设置监听事件,而使用mylayout的view去对mylayout里面的控件绑定事件是无效的

[43]在百度地图上面覆盖一个布局文件,在地图上的布局文件中去拖动地图时,地图也会随之移动,效果很不好,只想在触摸地图界面时才能让百度地图移动 解决:试过一些办法,setfocusable ,setfocesableintouchmode,听了群里一位网友的建议采用framelayout,都不起作用,后面突然想到,在可点击的控件上面去视图拖动地图,地图不会动,于是,我把所有覆盖在地图上面的布局文件的父布局设置clickable属性为true,问题解决!

[44]Eclipse中添加TODO标签后,在Tasks列表里面找不到刚添加的内容;

  解决:TODO 后面要接一个空格,TODO 标签后面第一个字最好为中文 不能为英文,我就遇到过这种情况,TODO后面直接英文在Tasks列表里面找不到,这有可能是Eclipse的Bug

[45] ArcGIS for Android FeatureLayer进行编辑,调用applyEdit方法前必须要把该featureLayer添加到MapView中才能提交成功。在applyEdit的回调方法不在UI线程中执行,所以callback方法里面不要进行UI相关操作,包括弹Toast

[46] PopupWindow焦点问题:使用按钮弹出popwindow,再次点击popupwindow又重新被打开,原因是点击按钮后popupwindow失去焦点自动hide,如果按钮的onclick事件里面有判断isShowing()状态,那么返回false,故每次都重新创建并popupwindow

[47]控件设置focusintouchable为true时,第一次点击控件会获取不到焦点

[48]使用Volly框架里面的Post方法提交数据时,会多次请求url,测试中出现请求失败后会重新再请求一次url或者多次,使用Android API里面原生的HttpPost请求时只会发送一次请求

[49]Android所有的widget都必须设置layout高宽属性

[50]ListView设置listSelector后点击Item没有UI变化效果

  解决:设置ListView的drawSelectorOnTop为true,解决ListView设置listSelector属性后选中ListItem无响应的问题,原理是在最上层绘制cacheColorHint解决ListView拖动时的背景色问题,设置为白色全透明即可解决

[51]Android TextView实现跑马灯 必须设置四个属性android:singleLine="true",以及android:ellipsize="marquee",android:focusable="true"以及android:focusableInTouchMode="true",也就是TextView必须获取到焦点

[52]TextView设置滚动效果

  解决:在布局里面设置android:scrollbars="vertical";或者在代码里面设置setMovementMethod(ScrollingMovementMethod.getInstance());

[53]优化布局:ViewStub用法

                     // viewStub=(ViewStub)findViewById(R.id.taskinfo_more_stub);

                     // viewStub.setLayoutResource(R.layout.task_xgd_layout);

                     // if (viewStub!=null) {

                     // View moreDetailView=viewStub.inflate();

                     // }

[53]Content has view with id attribute 'android.R.id.list' that is not a ListView

  解决:使用了继承自ListActivity或者ListFragment的类,布局文件中的ListView控件的id必须设置为‘android:id/list‘,即: android:id="@android:id/list"

 

转载于:https://www.cnblogs.com/David-Young/p/4451434.html

标签:控件,里面,自定义,记录,解决,设置,Andorid,android,Bug
来源: https://blog.csdn.net/weixin_30527323/article/details/96865916