生成APK时,报strings.xml的转换错误
Error:(4) Error: "xxx" is not translated in "en" (English) [MissingTranslation]
在<resources>里面添加代码忽略转换
<resources xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation">
将Activity设置成Dialog(AS),只需在Manifest里面修改activity的theme就可以了,代码什么的如常。
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
原来写的Theme.Dialog,后来将这个activity继承自Activity就好了。不过弹出的dialog老是有一个我不需要的标题栏,我就重新选择了一个主题(如下)。
<activity
android:name=".activity.ImageSelect"
android:label="ImageSelect"
android:theme="@android:style/Theme.DeviceDefault.Dialog.NoActionBar"></activity>
这样弹出的activity就没有标题栏了。
最近发现一个新的解决,或许这个更好,因为我的BaseActivity继承于AppCompatActivity,所以写一个Theme.AppCompat的样式
<style name="NoTitleTranslucentTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
在Manifest中引用,因为它会有个标题栏,所以将label置空
<activity
android:name=".activity.ActivitySelectImg"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
android:hardwareAccelerated="false"
android:label=" "
android:theme="@style/NoTitleTranslucentTheme"
android:windowSoftInputMode="adjustResize" />
今天注册完成第二步进入第三步的时候系统奔溃了,怎么都进不去。
后来发现是取userinfo时字段类型错了,WTF?
之前明明是整型怎么就变成字符串了???顿感心塞
好吧,那我只好加个判断了,自己转呗
//因为不确定值是String 类型或者是其他类型,所以这么干
public static String paserStringFromObject(Object object) {
String s = null;
if (object instanceof String) {
s = (String) object;
} else if (object instanceof Integer) {
s =String.valueOf((int)object);
}
return s;
}
//因为不确定值是Integer 类型或者是String类型,所以这么干
public static Integer paserIntFromObject(Object object) {
Integer i = null;
if (object instanceof String) {
i = Integer.parseInt((String) object);
} else if (object instanceof Integer) {
i = (Integer) object;
}
return i;
}
对话框按“确定”跳转页面,报异常
java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{1738abca V.E..... R......D 0,0-1080,1854} not attached to window manager
dialog未完成调用,当前activity就finish()了,我原来的代码是点“确定”按钮,进行判断跳转页面,然后dismiss()、finish(),现在语句顺序写成先dismiss(),finish()写在if语句里面,跳转动作之后。
百度问题得到的答案:
一般情况下,上面的方法不会出现任何错误。 任务结束后,ProgressDialog会正常消失。
但是在某些情况下,上面的使用方法就非常不安全。
在项目开发中会遇到在TabView的各个tab page进行切换。同时每个tab page中都会调用
这个异步任务HttpRequestTask去请求网络数据。这时会出现一个问题。
当用户在各个tab page间快速切换的时候,ProgressDialog 使用的context就很不安全。
会遇到调用 dialog.dismiss 和 dialog.show(); 的时候无法attach到Window Manager.
原因是在切换的时候,dialog还没有完成所有的调用,所对应的context已经被destroy或正在destroy。
这时就会导致上面的错误。
尝试解决这个问题。最初想使用ApplicationContext,(context.getApplicationContext()),但是,这个context无法用于ProgressDialog和Toast。会直接导致crash。
目前的解决方法是,先检查context对应的Activity的状态,如果不可用就停止dialog操作:
不知道是否可以用do{}while()
程序不能run,总是弹出waiting for debug
真机重启试试
重启无用的情况下,选择debug模式,当出现waiting for debug界面时,
点击菜单栏Run--->Attach debugger to Android process
弹出如下界面
选择你要运行的设备和项目,点击OK就行了。
数组越界
java.lang.ArrayIndexOutOfBoundsException: length=5; index=5
at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:7361)
at android.widget.ListView.layoutChildren(ListView.java:1709)
at android.widget.AbsListView.onLayout(AbsListView.java:2326)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:639)
at android.widget.FrameLayout.onLayout(FrameLayout.java:574)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:639)
at android.widget.FrameLayout.onLayout(FrameLayout.java:574)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:639)
at android.widget.FrameLayout.onLayout(FrameLayout.java:574)
at android.view.View.layout(View.java:16121)
at android.view.ViewGroup.layout(ViewGroup.java:5185)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2531)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2223)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1320)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:572)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5869)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1019)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:814)
问题发生在Adapter的getViewTypeCount()方法,因为我使用了5种类型,所以我设置的是return 5;但是getViewTypeCount()的返回数要从0开始,所以在使用类型数量上+1,这个问题就解决了。
Error:Execution failed for task ':app:buildInfoDebugLoader'.
> Exception while doing past iteration backup : Source E:\android\cartwo\app\build\intermediates\builds\debug\29707739489878\classes.dex and destination E:\android\cartwo\app\build\intermediates\builds\debug\29707739489878\classes.dex must be different
重新加载工程!
点击菜单栏Build--->RebuildProject
重新加载一下,再点击运行
Error:com.android.builder.internal.aapt.AaptException: Failed to crunch file
workspace路径太长,AS的文件路径不能超过240字节
Error:Execution failed for task ':app:validateSigningDebug'.
导入下载的工程出现这个错误,追究其原因是是下载的工程中有指定使用的Keystore文件的路径,
所以我们可以通过Android studio File-》ProjectStructure-》选择app ,再选择signing
把Store File里指定的Keystore文件的路径删除,或者填写自己的Keystore文件的路径
然后点击ok,再clean下工程即可
Ignoring InnerClasses attribute for an anonymous inner class
Dex的方法数超过上限,每个项目的Dex都有方法数的限制(上限65536,超过上限号称应用爆棚)
修改Gradle配置文件,启用MultiDex并包含MultiDex支持:
defaultConfig {
multiDexEnabled true
}
dependencies { compile 'com.android.support:multidex:1.0.1' }
Error:Execution failed for task ':androidOne:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: butterknife/ButterKnife$1.class
原因:在所添加的jar包或aar包中也引用了ButterKnife,与工程中引用的相冲突
Ctrl+N --> 在搜索框中输入ButterKnife--> 查找到所有引用该类的类,这些类即为引起冲突的类
去掉本工程中gradle中用于引用有冲突的包的代码或者将冲突的代码从jar包或aar包中移除,确保一个module中只引用了一份相同的第三方包
Fragment内控件点击切换MainActivity内Fragment
最近项目中用到fragmentTabHost,在其中的一个fragment中有多个按钮,点击可跳转到别的fragment,实现方法是,在MainActivity中写方法:
public void setTab(int tab){
tabHost.setCurrentTab(tab);
tabHost.setCurrentTab(tab);
}
在fragment中:
MainActivity mainActivity=(MainAcitvity)getActivity();
mainActivity.setTab(0);
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.aiming.weipai-2/base.apk"],nativeLibraryDirectories=[/data/app/com.aiming.weipai-2 b/arm64, endor b64, /system b64]]] couldn't find "liblecplayer.so"
apk安装后不能运行
所以,Android项目和所有library中的armeabi、armeabi-v7a、armeabi-v8a要保持同步,要有都有,要没有都没有。
Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
> Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27.1.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.
在build.gradle
,android{}
部分里添加以下代码:
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.1'
}
}
Fragment中onActivityResult不被调用的解决方案
https://blog.youkuaiyun.com/android_xue/article/details/78853710
出现第二种情况:getActivity()改为当前Fragment.this 解决
非原生Android系统上出现了两套权限管理系统,导致禁止、允许返回值一样
特别是相机调用的时候,禁止状态仍旧会调用相机,导致异常。
可根据机型特殊处理,但是安卓手机品牌、型号太多,处理起来太繁琐;
查询后,找到一个简单粗暴的办法,根据调用相机是否会抛异常判断相机权限授权状态,亲测非常nice
public static boolean isCameraCanUse() {
boolean canUse = true;
Camera mCamera = null;
try {
mCamera = Camera.open();
Camera.Parameters mParameters = mCamera.getParameters();
mCamera.setParameters(mParameters);
} catch (Exception e) {
canUse = false;
}
if (mCamera != null) {
mCamera.release();
}
return canUse;
}
依赖包添加成功,引用标红,编译可通过
重新编译一直没有效果,应该是从本地缓存编译的原因,所以删除工程根目录下的.gradle、.idea两个文件夹。重启AS会自动编译,不再标红