Android Exception

记录Android开发过程中遇到的问题,包括但不局限于异常及错误。

可使用网页自带搜索工具(control+F)快速检索需要的Exception


last update : 2018.04.19


其它问题:

一、导入项目时,提示 “invalid project description”

无效的项目描述,应该与ADT版本不同有关。

出错背景:外来源码放在工作区,然后导入Eclipse。

解决方法:外来源码先放在非工作区(如:桌面),然后导入到Eclipse,导入页面勾上 “copy projects to into workspace” 复制一份到工作区。


二、打开Eclipse,提示 “Failed to create the Javae Virtual Machine”

无法创建Java虚拟机

出错背景:系统还原后出现或者感觉莫名其妙出现。实际上应该是环境、配置等发生变化,如果出现这个问题,请回顾之前有做过什么事情,比如安装或者更新JDK,修改过环境变量等等。

解决方法:首先确定JDK已安装,环境变量已配置(JAVA_HOME, Path等),修改后重启系统,我就是这么搞定的。

如果无上述问题,那只能修改 eclipse.ini 文件,请自行选择一种或几种进行尝试。

// 1. 直接删掉虚拟机位置项, -vm 选项
		
// 2. 添加java虚拟机具体位置,分成两行,例如
-vm
C:\Program Files\java\jdk1.6.0_29\bin\javaw.exe
		
// 3. 减少堆空间的最大值,一般是砍一半
-Xmx1024m 
-Xmx512m
-Xmx256m
		
// 4. 修改JDK版本号,对应你的版本
-Dosgi.requiredJavaVersion=1.6

其它补充:

1、eclipse.ini 文件位置

windows 位于 eclipse 程序安装目录的根目录

mac os  eclipse安装目录/Eclipse.app/Contents/MacOS,呃,就是右键应用图标,选“显示包内容“,然后你懂的

2、如果修改后仍然报错,请确保解决方法第2项写在 -vmgrgs 之前,如果你有写的话

3、其它eclipse.ini文件相关资料可以参考这里


三、The connection to adb is down, and a severe error has occured.

The connection to adb is down, and a severe error has occured.
You must restart adb and Eclipse.

windows环境下有此问题,原因是有其它adb进程在运行,eclipse无法启动sdk的adb。 
一般类似360手机助手、qq手机助手、豌豆荚以及酷狗音乐等可以连接到手机的程序,都有可能开一个adb进程,名字一般叫xxxadb,就是这个搞鬼。

解决方法:
首先,打开任务管理器,仔细找一下,干掉这个多余adb进程。为方便起见,最好设置手机助手这类程序不可开机启动。
接着,打开cmd命令窗口, 输入“adb kill-server”, 然后输入“adb start-server”, 重启一下adb。
最后,重启eclipse,搞定收工。

其它补充:
adb命令需要配置环境变量,如果不想配置,可以cd到adb.exe所在目录,

或者在adb.exe目录下,按 shift + 鼠标右键,点“在此处打开命令窗口”。


Android Studio ADB connection error

Mac 使用Android studio,安装 Genymotion 有时会也会出现这个问题。

解决方法同上

1. Mac 有一个 “活动监视器”,类同于Windows的任务管理器。在应用》其它里面,也可以用 Spotlight 搜。

2. 先关掉Genymotion,然后在活动监视器中,干掉adb进程。

3. 在Android studio 中的 Terminal 中输入“adb start-server”, 重启一下adb。


四、Failed to install *.apk on device 'emulator-5554': timeout

运行程序安装时,提示模拟器超时

解决:Mac环境下,可以使用通过重启 adb 重新建立连接,基本上几秒就可以搞定。

windows环境下重启adb无效,也可能是我等得不够久。直接关闭模拟器,重新 launch。


模拟器超时时间默认为 5000ms,显然有点短,我们可以手动改大些。

eclipse下,window >> preferences >> Android >> DDMS >> ADB connection time out (ms) 值修改加大


其它:重启adb方法,除了上面 “三” 用的命令,还可以在 eclipse 的 Devices 页面 Reset adb。

 


五、使用Eclipse 打包apk,提示 conversion to dalvik format failed with error 1
解决:

1. 打包前删除bin目录下文件;

2. clear project;

3. 确保apk输出目录不带中文字符。


六、Eclipse android sdk content loader 0

打开eclipse 后一直显示在加载SDK,卡住了,重启无效

解决:

1. 打开 .android 目录,一般在C盘administrator用户目录下;

2. 删除 cache 目录下的所有文件;

3. 删除 ddms.cfg 文件;

4. 重启ecplise。

参看这里


七、Gradle project refresh failed error:cause:peer not authenticated

导入项目后报错,项目使用的Gradle版本和Android studio使用的Gradle版本不一致导致

修改Build.gradle 为当前使用的版本

classpath 'com.android.tools.build:gradle:2.1.2'

然后重新编译项目,选 Rebuild Project 


八、AndroidStudio打包出现"xxx" is not translated in "zh" (Chinese) [MissingTranslation]

显然是没有做国际化处理,如果暂时不想做国际化,可以在strings.xml 文件中加上这个

// 个别字符不做国际化 
<string name="custom_name" translatable="false">单个</string> 
// 全部不做
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">


九、Android studio 安装应用程序失败 INSTALL_CANCELED_BY_USER.

从信息上看,是用户手机取消了安装。

原因大概如下几种,请根据实际情况尝试:

1. 安装应用时,弹窗选择是否安装,没有选择安装,倒计时结束后安装失败;

2. 设置》》开发者选项》》允许USB安装应用》》开启;

3. 设置》》权限管理》》安装权限》》通过USB验证的应用程序》》开启;

4. 内存不足也有可能导致此问题发生。


十、Android studio 安装应用程序失败 INSTALL_FAILED_INSUFFICIENT_STORAGE

从信息上看,是内存空间不足。

解决:请清理存储空间。


十一、Could not get unknown property 'release' for SigningConfig container

背景:Android studio Gradle 编译时出现

解决:app.gradle 文件中 signimgConfigs 写在 buildTypes 前面

signingConfigs 写在 buildTypes 前面


十二、打包时报 Expected resource of type styleable [ResourceType]

背景:编译时正常通过,打包时报错;错误指向

tabTextColor = a.getColor(1, tabTextColor);

这个应该是警告,在方法上面加上 

@SuppressWarnings("ResourceType")
过滤到即可。

十三、打包时报“Warning:com.alipay.android.phone.mrpc.core.b: can't find referenced method 'org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int,android.net.SSLSessionCache)' in library class android.net.SSLCertificateSocketFactory”

背景:集成支付宝支付时出现,支付宝SDK版本20170922.

解决:在原有的混淆基础上加上忽略

# 支付宝支付
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    <fields>;
    <methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}

# 报错后新增的
-dontwarn android.net.**
-keep class android.net.SSLCertificateSocketFactory{*;}


十四、打包时报java.util.zip.ZipException: duplicate entry: com/google/zxing/aztec/AztecDetectorResult.class

背景:集成二维码生成。

原因:从错误描述看,有类重复了,一般是包重复导入,比如同时使用 jar 导入和 compile ,或者有第三方SDK同时包含相同的类等。

解决:根据提示找到重复的类/包,剔除掉。


十五、打包时报com.android.dex.DexIndexOverflowException: Cannot merge new index 65680 into a non-jumbo instruction

背景:程序中调用的代码方法个数超过了Android设定的上限(65536个),打包时dex不能生成。

解决:这么大的问题,Google自己也知道,早就给了解决方案:分包

步骤1. 添加多dex支持

app.build 文件

defaultConfig {
    ...
    // 新增
    multiDexEnabled true
}
...
dependencies {
    // 增加 multidex 
    compile 'com.android.support:multidex:1.0.1'
    ...
}

步骤2. 根据实际情况修改Application 文件 

// 情况1:如果没有创建自定义的Application文件,也不打算创建,可以直接在 AndroidManifest.xml 中修改Application 为 
...
android:name="android.support.multidex.MultiDexApplication" 
...


// 情况2:已经创建了Application 文件,可以修改继承  android.support.multidex.MultiDexApplication
public class MyApplication extend MultiDexApplication {
    ...
}

// 情况3:Application 已经继承了其它父类,可重写 attachBaseContext 方法
public class MyApplication extends OtherApplication { 
   @Override 
   protected void attachBaseContext(Context base) { 
      super.attachBaseContext(base); 
      MultiDex.install(this); 
   } 
}

步骤3.重新 build 即可

参看这里


十六、Gradle 编译报错 Execution failed for task ':processDebugManifest'

背景:引入第三方库。

解决:从报错看,应该是AndroidManifest.xml文件中出错,可以打开AndroidManifest.xml文件,点击 xml 左下角 "merged manifest"功能,查看错误信息。

错误信息显示,第三方库启用了supportsRtl功能,而主AndroidManifest.xml文件没有启用,解决方法就是主AndroidManifest.xml文件也开启supportsRtl功能即可。

注:supportsRtl  是设置是否支持屏幕左右对换的。在开发者选项中,有屏幕对换功能可以看到效果。

参看:https://stackoverflow.com/questions/17587751/gradle-execution-failed-for-task-processdebugmanifest


十七、一套代码多包名打包apk,同一个手机不能同时安装的问题。

背景:原来代码中打包,其中包名 com.test.aaa (A应用),修改 build.gradle 中的 applicationId 为 com.test.bbb (B 应用),可以打包成功,单独安装也没有问题,但是一起安装就会报安装包似乎已损坏。com.test.aaa 和 com.test.bbb 明明已经是2个应用,为何不能安装在同一手机呢。检查发现,AndroidManifest.xml 使用了 provider ,这个同 applicationId 一样要做唯一处理。

解决:修改AndroidManifest.xml 中 provider 节点的 authorities 名称,A应用和 B 应用的 authorities 必须不一样。






/

异常汇总:

一、java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx}: java.lang.NullPointerException

原因1:控件没有初始化直接使用,比如没有new实例,没有 findViewById(R.id),一般错误日志有提示哪个控件。

原因2:使用 requestWindowFeature() 方法,需要写在 setContentView(layoutId) 方法之前。


二、android.os.NetworkOnMainThreadException

原因1:在主线程访问网络。Android 4.0 之前可以在主线程访问,4.0 以后不再支持。

解决方法1:在 onCreate() 中添加下面代码

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 添加下面代码
		StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
				.detectDiskReads().detectDiskWrites().detectNetwork()
				.penaltyLog().build());
		StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
				.detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
				.build());
	}


解决方法2:在子线程中访问网络


三、java.util.IllegalFormatConversionException: %d can't format java.lang.String arguments

原因:提示写得很清楚,String类型的数据不能用%d进行格式。

出错背景:使用 String.format 时,参数与转换字符对应出错。


四、android.widget.AbsListView.obtainView(AbsListView.java:2265)

原因:adapter中的 getView 方法返回null。

解决:检查是否直接写成 “return null;" 或者代码逻辑异常导致返回null


五、java.lang.RuntimeException: An erroroccured while executing doInBackground()

日志提示 doInBackground() 这个方法里有错误。

原因1:doInBackground() 这个方法运行在工作线程中,不允许做UI显示。检查这个方法,如果有关UI的显示操作,移到onPostExecute() 方法中完成。

出错背景:使用 AsyncTask 做网络数据请求。


六、java.lang.IllegalArgumentException: The key must be an application-specific resource id.

出错背景:使用 view.setTag(int key, Object tag) 时,写成 view.setTag(11, “text”),  这里这个Key应该是一个R.id才行

解决:在strings.xml 文件中增加id

<!-- tag id -->
<item type="id" name="key_text"></item>
<item type="id" name="key_list"></item>
使用时

view.setTag(R.id.key_text, "text");

七、java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams

使用背景: View.setLayoutParams(LayoutParams params); 动态修改view的宽高

日志提示:RelativeLayout.LayoutParams 不能转换为 LinearLayout.LayoutParams, 所以这里应该改为LinearLayout 的LayoutParams

解决:使用 View.setLayoutParams(LayoutParams params) 时,view的父控件是什么布局,就应该使用什么布局的LayoutParams

其它:当同一页面中有两个不同的View使用不同的LayoutParams时,写上LayoutParams的类名可以有效减少失误

// 写法一, 当使用多个不同的LayoutParams时易出错
LayoutParams lpLayoutParams1 = new LayoutParams(100, 100); 
// 写法二,指明是什么布局下的LayoutParams, 避免失误
LinearLayout.LayoutParams lpLayoutParams2 = new LinearLayout.LayoutParams(100, 100);

八、java.lang.IllegalStateException: Can't change tag of fragment *

出错背景:使用viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList));

使用ViewPager加载多个Fragment页面,这里要为每个Fragment创建一个实例,再加载到列表中

若重复加载可能出现此异常


九、java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x1

出错背景:做分辨率适配后出现

原因:某个分辨率下,找不到对应的 dimens 值,比如可能没有适配到小分辨率的手机


十、java.lang.NoSuchMethodError: android.widget.RelativeLayout.setBackground

使用 RelativeLayout.setBackground 时出现

查看官方文档,setBackground 需要API 大于等于16,API小于16,可以使用 setBackgroundDrawable

if (Build.VERSION.SDK_INT >= 16) {
    layout.setBackground(drawable);
} else {
    layout.setBackgroundDrawable(drawable);
}

十一、java.lang.NoSuchMethodError: android.app.Notification$Builder.build

同上,使用需要API 大于等于16,低于16 可以导入android v4 支持包

android.support.v4.app.NotificationCompat.Builder


十二、java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.

ListView 当有设置 header时,注意要先 addHeaderView() ,然后再 setAdapter()

myList.addHeaderView(header); // 先
myList.setAdapter(dataAdapter);  // 后

十三、android xml 中的 java.lang.IndexOutOfBoundsException: 

如果是java代码报错,则是数组下标越界,一般容易解决。

偶然一次是 android xml 文件报错,比较特殊,经查,确认是点9图片的问题

这里的xml 文件引用了一个不规范的点9图片,替换图片即可解决。


常见的不规范问题:

1、后缀名没有 .9

2、四周的拉伸的标记有缺


十四、Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

背景:使用Genymotion出现此问题 

原因:Genymotion 移除了对ARM Library 的支持,而很多应用都会用到ARM

解决:

方法一:为Genymotion 安装ARM Libr 支持,点这里下载,或者这里下载,直接将压缩包拖到Genymotion模拟器即可安装。

方法二:使用android studio 或者 Intellij IDEA 可以通过设置避免该问题,参看这里。


Genymotion 也移除了对Google Play 的支持,要安装Google play 

参看这里 http://forum.xda-developers.com/showthread.php?p=47502902#post47502902


十五、Multiple annotations found at this line:
- error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" 
attribute?

在XML 文件出现,使用多个转换符时,需要标注是第几个 参考这里

例如:

// 报错
<string name="test">%s 价格%.2f元</string>
// 需修改为
<string name="test">%1$s 价格%2$.2f元</string>


十六、ListView OnItemClickListener 事件不响应

A. 列表项点击事件不响应,如果代码正常,可能是 listView item layout  中含有button 或 radioButton 等控件。

button 等控件会优先获取到 focus,影响到列表项点击响应

解决:

方法一:为 button等控件设置 focusable="false"

方法二:为 item layout 根布局设置 descendantFocusability="blocksDescendants"

// 设置在Button等能够获取focus的控件上
android:focusable="false"
// 设置在item 根布局中
android:descendantFocusability="blocksDescendants"


B. 相反,如果 listView item layout 没有button等控件,检测 item layout 是不是写了

android:clickable="true"
如果有写,砍了它!哎,说多了都是泪......


十七、java.lang.ExceptionInInitializerError   ......

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load lept: findLibrary returned null

引用缺失

原因:

1. libs 中的 jar 包缺失,如果文件夹名为 lib ,请改为 libs

2.  libs / armeabi 下 .so 文件缺失


十八、shape stroke 设置虚线变实线问题

android 4.0 后有此问题,参看这里

解决:关闭硬件加速

在使用虚线的控件设置 android:layerType="software" 即可


十九、android.util.AndroidRuntimeException: { what=11 when=-91ms } This message is already in use.

使用handler 发送消息时,需要使用新的Messsage


二十、android.view.InflateException: You must specifiy a layout in the include tag: <include layout="@layout/layoutID" />

使用自定义布局时候,确保使用为 

<include layout="@layout/your_layout" />

而不是

<include android:layout="@layout/your_layout" />

二十一、RecyclerView 设置 warp_content不起作用

修改支持库版本大于等于 23.2.1,参看这里

compile 'com.android.support:recyclerview-v7:23.2.1'


二十二、badtokenexception unable to add window is not valid is your activity running

背景:使用Dialog

原因:Dialog弹出显示时,依附的View/Activity已经销毁了。

解决:判断界面是否销毁后再弹出。

if (!isFinishing()) {
       myDialog.show();
}

参看这里


二十三、syntax error, expect {, actual string, pos 33, fieldName result

背景:使用 阿里FastJSON解析JSON,版本

fastjson-1.1.43.android.jar

返回的json包含类似 {“test”:["aaa","bbb", "ccc"] } 结构,即JSON数组中为字符串,而不是一个复杂的对象,

这个JSON格式的没有错的,但是该版本FastJSON解析有问题,尚未测试最新版FastJSON是否已修改该问题。

解决:

1. 修改服务器返回JSON结构,比如上面的JSON改为 {"test":"aaa,bbb,cc"}

2. 使用其它新版本的FastJSON (未测试)

3. 使用其它JSON解析库,比如 gson 


参看这里


二十四、Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'. > java.io.IOException: Please correct the above warnings first.

Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.DataBindingUtil: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBinderMapper
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: android.databinding.ViewDataBinding: can't find referenced class android.databinding.DataBindingComponent
Warning: com.tencent.smtt.export.external.DexLoader: can't find referenced class dalvik.system.VMStack
Warning: com.tencent.smtt.export.external.DexLoader: can't find referenced class dalvik.system.VMStack

背景:混淆打包编译时出现。提示编译时出现warnings,需要解决后才能继续编译。

debug模式下是不会出现该问题的,只有正式打包才会出现。

经查,报错的代码中并未使用,基本判定为第三方包中引用的。

解决:混淆时忽略该类,在 proguard-rules.pro 文件中添加

-dontwarn android.databinding.**
-dontwarn com.tencent.smtt.export.external.**
以后遇到这种warning 都可以的使用 -dontwarn 进行忽略。


二十五、Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

背景:使用 Context.startActivity(Intent intent) 导致

原因:一般使用 Activity.startActivity(Intent intent),因为 Activity 有重载过,如果一定要使用 Context的startActivity(),

需要加上 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


二十六、java.util.ConcurrentModificationException

背景:需要对 list 中的数据进行增删操作。一般来说,使用 for 循环下,List.remove(int index) 仅适合删除一次的情况,

如果在 for 循环中需要对 list 数据进行多个多次删除,最好使用 Iterator ,或者先记录后一次性全部删除。

解决:

List<String> list = new ArrayList<String>();

// 这样写容易出错
for (String str : list) {
    if (str.startsWith("abc")) {
        list.remove(str);
    }
}

// 最好使用这个
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    if (iterator.next().startsWith("abc")) {
        iterator.remove();
    }
}

// 或者这样
List<String> listDel = new ArrayList<String>();
for (String str : list) {
    if (str.startsWith("abc")) {
         listDel.add(str);
    }
}
if (listDel.size() > 0) {
    list.removeAll(listDel);
}


二十七、IllegalStateException: Can not perform this action after onSaveInstanceState

背景:onResume 中调用了getFragmentTransaction 的  commit 方法。

解决:使用 commitAllowingStateLoss 方法。

参看这里:https://blog.csdn.net/edisonchang/article/details/49873669









  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,你遇到的问题是"Qt for Android Exception in thread "main" java.net.ConnectException: Connection timed out: connect"。这个错误通常是由于连接超时引起的。下面是一些解决办法: 1. 检查网络连接:确保你的设备已连接到互联网,并且网络连接正常。你可以尝试使用其他应用程序测试网络连接是否正常。 2. 检查URL地址:确保你的URL地址正确无误,并且可以在浏览器中正常访问。有时候URL地址可能会被错误地输入或者被防火墙阻止。 3. 增加连接超时时间:你可以尝试增加连接超时时间,以便给予连接更多的时间来建立。你可以使用以下代码示例来设置连接超时时间为10秒: ```java import java.net.HttpURLConnection; import java.net.URL; public class Main { public static void main(String[] args) { try { URL url = new URL("your_url_here"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(10000); // 设置连接超时时间为10秒 connection.connect(); // 进行其他操作 } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意将"your_url_here"替换为你要连接的URL地址。 4. 检查防火墙设置:有时候防火墙设置可能会阻止你的应用程序与特定的服务器建立连接。你可以尝试禁用防火墙或者将你的应用程序添加到防火墙的白名单中。 5. 检查代理设置:如果你的网络使用了代理服务器,你需要确保你的应用程序已正确配置代理设置。你可以在应用程序中设置代理服务器的地址和端口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值