600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android开发中遇到的技术难题 android开发过程中遇到的问题以及解决办法

android开发中遇到的技术难题 android开发过程中遇到的问题以及解决办法

时间:2024-05-23 03:16:16

相关推荐

android开发中遇到的技术难题 android开发过程中遇到的问题以及解决办法

####编译的时候遇到的问题:

“android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.”

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.(Handler.java:121) at android.widget.Toast.(Toast.java:68) at android.widget.Toast.makeText(Toast.java:231)

问题都是因为在子线程中请求更新UI。弹出Toast和更新UI都需要在主线程(UI thread)来完成。解决办法: 1.用AsyncTask来实现,就不提供具体的实现代码了 2.如果用到handler的时候:

private Handler handler = new Handler(Looper.getMainLooper()) {//获取主线程的looper

public void handleMessage(android.os.Message msg) {

};

};

3.用runOnUiThread来实现:

activity.runOnUiThread(new Runnable() {

@Override

public void run() {

//这是完成的操作

}

});

####Android Studio混淆代码时,出现这个问题:

Execution failed for task :xxxx:packageRelease

Unable to compute hash of D:\asspace\xxxx\xxxx\build\intermediates\classes-proguard\release\classes.jar

在Stack Overflow上找到类似的问题:/questions/32437167/unable-to-compute-hash-of# 解决办法为:Please, read warnings in console carefully. I`ve also faced with similar issue and in my case there were warnings about processing one of third party libraries. After applying corresponding changes related with the library to proguard file, all started to work correctly。 大致意思是:请仔细阅读控制台警告。 我也面临类似的问题,我遇到的问题是,对处理第三方库的警告。应用与图书馆的ProGuard文件相关的相应更改后,一切都开始正常工作。

我遇到的情况是:同样的第三方库被指定了两次,修改后就可以正常导出包了。可能是高版本的 sdk 通过 proguard 混淆代码时默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加。

####在RecyclerView的Adapter中用ButterKnife bindView出现一下错误:

java.lang.RuntimeException: Unable to inject views for com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder@52700878

at butterknife.ButterKnife.inject(ButterKnife.java:221)

at butterknife.ButterKnife.inject(ButterKnife.java:184)

at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder.(ButterknifeCustomBaseAdapter.java:59)

at com.murach.databasehomework.ButterknifeCustomBaseAdapter.getView(ButterknifeCustomBaseAdapter.java:70)

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

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

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

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

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

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

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

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

at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)

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

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

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

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

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

at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)

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

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

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

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

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

at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)

at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)

at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)

at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)

at android.view.Choreographer.doCallbacks(Choreographer.java:562)

at android.view.Choreographer.doFrame(Choreographer.java:532)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)

at android.os.Handler.handleCallback(Handler.java:730)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

at android.app.ActivityThread.main(ActivityThread.java:5103)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.reflect.InvocationTargetException

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at butterknife.ButterKnife.inject(ButterKnife.java:216)

at butterknife.ButterKnife.inject(ButterKnife.java:184)

at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder.(ButterknifeCustomBaseAdapter.java:59)

at com.murach.databasehomework.ButterknifeCustomBaseAdapter.getView(ButterknifeCustomBaseAdapter.java:70)

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

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

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

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

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

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

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

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

at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)

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

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

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

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

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

at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)

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

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

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

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

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

at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)

at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)

at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)

at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)

at android.view.Choreographer.doCallbacks(Choreographer.java:562)

at android.view.Choreographer.doFrame(Choreographer.java:532)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)

at android.os.Handler.handleCallback(Handler.java:730)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

at android.app.ActivityThread.main(ActivityThread.java:5103)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.TextView

at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder$$ViewInjector.inject(ButterknifeCustomBaseAdapter$ViewHolder$$ViewInjector.java:13)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at butterknife.ButterKnife.inject(ButterKnife.java:216)

at butterknife.ButterKnife.inject(ButterKnife.java:184)

at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder.(ButterknifeCustomBaseAdapter.java:59)

at com.murach.databasehomework.ButterknifeCustomBaseAdapter.getView(ButterknifeCustomBaseAdapter.java:70)

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

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

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

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

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

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

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

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

at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)

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

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

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

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

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

at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)

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

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

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

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

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

at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)

at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)

at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)

at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)

at android.view.Choreographer.doCallbacks(Choreographer.java:562)

at android.view.Choreographer.doFrame(Choreographer.java:532)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)

at android.os.Handler.handleCallback(Handler.java:730)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

at android.app.ActivityThread.main(ActivityThread.java:5103)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

at dalvik.system.NativeStart.main(Native Method)

检查View类型是否正确。

####Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" 一个项目Debug包,安装在红米NOTE 1S手机上的时候崩溃退出,查看logcat发现报“java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication"”:

FATAL EXCEPTION: main Process: cn.hnshangyu.electricproject, PID: 2454

java.lang.RuntimeException: Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication: java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" on path: DexPathList[[zip file "/data/app/cn.XXX-2.apk"],nativeLibraryDirectories=[/data/app-lib/cn.XXX-2, /vendor/lib, /system/lib]]

at android.app.LoadedApk.makeApplication(LoadedApk.java:509)

at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4413)

at android.app.ActivityThread.access$1500(ActivityThread.java:141)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:136)

at android.app.ActivityThread.main(ActivityThread.java:5113)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:515)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.tools.fd.runtime.BootstrapApplication" on path: DexPathList[[zip file "/data/app/cn.XXX-2.apk"],nativeLibraryDirectories=[/data/app-lib/cn.XXX-2, /vendor/lib, /system/lib]]

at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

at java.lang.ClassLoader.loadClass(ClassLoader.java:497)

at java.lang.ClassLoader.loadClass(ClassLoader.java:457)

at android.app.Instrumentation.newApplication(Instrumentation.java:975)

at android.app.LoadedApk.makeApplication(LoadedApk.java:504)

at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4413)

at android.app.ActivityThread.access$1500(ActivityThread.java:141)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:136)

at android.app.ActivityThread.main(ActivityThread.java:5113)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:515)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)

at dalvik.system.NativeStart.main(Native Method)

查看我的代码中并没有这个类,只能是系统自带的类,然后在网上搜索“com.android.tools.fd.runtime.BootstrapApplication”这个类在哪里出现,发现这个类是Instant Run方法用到的,因此应该是红米NOTE不支持 Instant Run才导致的。感谢lihenair的博客!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。