Android错误知识汇总
2017-02-20 22:02
465 查看
1.Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)
解决方法:在gradle文件中改,只需要将重复的引用中的compile改成provided就行。2.AS中运行项目时出现Error: Execution failed for task ‘:app:transformClassesWithDexForDebug’…
解决方法:重新clean project3.Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’. com.Android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘F:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe” finished with non-zero exit value 1
解决方法:这个是因为依赖包重复了 ,只需要将其中一个重复引用的依赖去掉就行了,如:compile('com.android.support:appcompat-v7:23.+') { exclude module: 'support-v4' }
4.Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘F:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe” finished withnon-zero exit value 2
解决方法:这个错误在app的build.gradle里面添加下面这句就好了。
android { defaultConfig { ... multiDexEnabled true } }
5.Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)
解决方法:在gradle文件中改,只需要将重复的引用中的compile改成provided就行。6.AS中运行项目时出现Error: Execution failed for task ‘:app:transformClassesWithDexForDebug’…
解决方法:重新clean project7.Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’. com.Android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘F:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe” finished with non-zero exit value 1
解决方法:这个是因为依赖包重复了 ,只需要将其中一个重复引用的依赖去掉就行了,如:compile('com.android.support:appcompat-v7:23.+') { exclude module: 'support-v4' }
8. java.lang.NoSuchMethodError: No static method setOnApplyWindowInsetsListener(Landroid/view/View;Landroid/support/v4/view/OnApplyWindowInsetsListener;)V in class Landroid/support/v4/view/ViewCompatLollipop; or its super classes (declaration of ‘android.support.v4.view.ViewCompatLollipop’ appears in /data/data/cniao5.com.cniao5shop/files/instant-run/dex/slice-internal_impl-24.2.1_2eab930133e1b5ce89e8f97bd2247bca5bd1b530-classes.dex)
解决方法:使用最新的compileSdkVersion、buildToolsVersion即可
9.Error:(7, 33) 错误: 找不到符号 符号: 类 TintTypedArray 位置: 程序包 android.support.v7.widget
解决方法:在sdk23时,TintTypedArray是在android.support.v7.internal.widget.TintTypedArray包下的,在sdk25时,变成了 android.support.v7.widget.TintTypedArray10. okhttp异常: java.lang.IllegalStateException: closed
java.lang.IllegalStateException: closed at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:378) at okio.Buffer.writeAll(Buffer.java:993) at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106) at okhttp3.ResponseBody.bytes(ResponseBody.java:128) at okhttp3.ResponseBody.string(ResponseBody.java:154) at com.gjg.fjdshop.ui.home.fragment.HomeFragment$4.onResponse(HomeFragment.java:121) at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133) at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
解决方法:
这个错误是由于response.body().string()调用了多次导致的,string()仅可调用一次。
11. 解决app启动时的白屏问题
其实,黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。//1、设置背景图Theme
<style name="Theme.AppStartLoad" parent="android:Theme"> <item name="android:windowBackground">@drawable/ipod_bg</item> <item name="android:windowNoTitle">true</item> </style>
//2、设置透明Theme
<style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style>
12. 防止app一进入页面时就弹出软键盘
//隐藏软键盘 getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
注意:需要放在联网请求数据之前
13.butterknife在library中的使用问题
创建一个新的library,需要使用到butterknife,但是使用@bind时,一直不会显示到对应资源文件的id,而显示 R.id.class。原因:因为在library里R.id.xxx不再是final类型了,也就不是常量了变成可变的,而注入是需要传入常量
butterknife当前版本是8.4.0,已经提供了对library project的支持,github主页的使用步骤总结一下就是:
1.To use Butter Knife in a library, add the plugin to your buildscript:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0' } }
2.and then apply it in your module:
apply plugin: 'com.android.library' apply plugin: 'com.jakewharton.butterknife' dependencies { compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' }
3.Now make sure you use R2 instead of R inside all Butter Knife annotations.
class ExampleActivity extends Activity { @BindView(R2.id.user) EditText username; @BindView(R2.id.pass) EditText password; }
但是按照这个步骤操作后并没有效果,用@BindView的地方提示NullPointerException,用@onClick的标注的点击事件,点击后也没有反应
最终解决方案
最后发现,只需修改一下上述步骤1和2就可以了。
步骤1加上依赖注入的plugin:
buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' // 添加的部分 classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0' } }
然后步骤2也修改一下:
apply plugin: 'com.android.library' apply plugin: 'com.jakewharton.butterknife' apply plugin: 'android-apt' dependencies { compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0' // 修改的地方 把annotationProcessor改为apt }
这样处理之后,就正常了!
14.Handler的正确用法
下面的用法可以消除黄色警告,消除内存泄露。private MyHandler handler = new MyHandler(this); static class MyHandler extends Handler{ private final WeakReference<SplashActivity> mActivity; public MyHandler(SplashActivity activity){ mActivity=new WeakReference<SplashActivity>(activity); } @Override public void handleMessage(Message msg) { //若activity退出就不处理消息 if(mActivity.get()==null){ return; }else{ SplashActivity splashActivity=mActivity.get(); if (splashActivity.isFinishing()) { return; } // 判断进入主页面还是登录页面 splashActivity.goMainOrLogin(); } } }
15.使用FragmentTabHost layout doesn’t render
java.lang.IllegalStateException: No tab known for tag null at android.support.v4.app.FragmentTabHost.doTabChanged(FragmentTabHost.java:334) at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:280) ......
http://stackoverflow.com/questions/14370745/fragmenttabhost-graphical-layout-doesnt-render
FragmentTabHost will not show any content as the content will be added dynamically. So no issues their. Should work when u add the tabs in the code and test it. androidhive.info/2011/08/android-tab-layout-tutorial – mipreamble Jul 9 at 12:21
16.如何在 ScrollView 中如何嵌入 ListView
在 ScrollView 添加一个 ListView 会导致 listview 控件显示不全,通常只会显示一条,这是因为两个控件的滚动事件冲突导致。所以需要通过 listview 中的 item 数量去计算 listview 的显示高度,从而使其完整展示,如下提供一个方法供大家参考。1、在计算listview总高度并设置
ListView listView = (ListView) findViewById(id);
YourAdapter adapter = new MyAdapter(“初始化你的适配器”);
listView.setAdapter(adapter);
setListViewHeightBasedOnChildren(listView);(在setAdapter后调用自定义的方法)
/** * @param listView */ private void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); }
使用该方法需要注意:子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
注意:如果直接将 ListView 放到 ScrollView 中,那么上面的代码依然是没有效果的.必须将 ListVIew 放到
LinearLayout 等其他容器中才行.
2、 自定义ListView,重载onMeasure()方法,设置全部显示
public class ScrollViewWithListView extends ListView { public ScrollViewWithListView(android.content.Context context,android.util.AttributeSet attrs) { super(context, attrs); } /** * Integer.MAX_VALUE >> 2,如果不设置,系统默认设置是显示两条 */ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
以上可以解决scrollView内嵌listView,但是有一个问题是第一次进入界面时动态加载listview的items后页面会跳转到listview的第一个子项,这很蛋疼,
无奈又不知道怎么解决,就先用
scrollView.post(new Runnable() { //让scrollview跳转到顶部,必须放在runnable()方法中 @Override public void run() { scrollView.scrollTo(0, 0); } });
17.Error:Execution failed for task ‘:app:processDebugManifest’. Manifest merger failed with multiple errors, see logs
网上的解决方法:方法1
第一步:
在Manifest.xml的application标签下添加tools:replace=”Android:icon, android:theme”(多个属性用,隔开,并且记住在manifest根标签上加入xmlns:tools=”http://schemas.android.com/tools”)
你肯定说,不都一样嘛,但是你的错误是不是还在,还在那么,我们继续往下走:
第二步:不用看了,问题百分之百,在你的builde.gradle的位置
minSdkVersion 16
targetSdkVersion 23
你看清楚,你的这个值和你要依赖的那个包,是不是builde.gradle不一样。
改完就OK了。
方法2:在build.gradle根标签上加上useOldManifestMerger true (懒人方法)
但是,我的错误并不是这个造成的,我的错误原因是将
android:allowBackup="true"
设置成了
android:allowBackup="false"
将其改回来即可。
18. adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
安装APK报错:Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE],表示APK需要没有签名或者签名不符合系统签名。解决方法:使用源码下的 build/target/product/security/ 下的platform.x509.pem 和 platform.pk8(注意这里如MTK源码中需要使用对应build/target/product/security/项目/下的这两个工具),以及源码下的out/host/Linux-x86/framework/(这个为编译源码后的目录)下的signapk.jar,共三个工具进行签名。
签名方法:将上述三个apk拷贝到同一个目录下,使用” Java -jar signapk.jar platform.x509.pem platform.pk8 待签名名字.apk 签名后名字.apk “命令进行签名。
然后安装即可。
相关文章推荐
- Android错误信息汇总
- Android开发知识汇总
- android遇到的一些错误汇总
- 史上最牛最全android开发知识汇总
- [转]Android开发错误汇总
- Android错误汇总
- android知识汇总
- 史上最牛最全android开发知识汇总
- Android开发: AIDL知识汇总
- Android 字体相关知识汇总
- android 编译错误汇总
- android知识链接汇总(2)
- 自定义控件和Android Library Project 知识链接汇总
- android知识大汇总
- android知识链接汇总(5)
- Android小知识汇总
- android知识链接汇总
- android 蓝牙知识链接汇总
- Android触摸屏开发知识汇总
- 玩转BeagleBoard xM——TI_Android_ICS_4.0.3_DevKit编译错误及解决办法汇总