一些bug及解决办法

生成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.gradleandroid{}部分里添加以下代码:

 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会自动编译,不再标红

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值