当前位置:   article > 正文

Android开发bug总结(持续更新)_java.lang.illegalstateexception: fragment not atta

java.lang.illegalstateexception: fragment not attached to a context.

Android Studio bug总结

1.Error:Could not read cache value from 'C:\Users\xxxxx\.gradle\daemon\4.4\registry.bin'.

解决方法:打开C盘当前用户文件夹->.gradle->daemon->选择报错得gradle版本的文件夹->选中文件夹中所有文件并删除->重启studio
参考链接:https://stackoverflow.com/questions/36664143/could-not-read-cache-value-from-registry-bin-android-studio

开发中bug总结

1.java.lang.IllegalStateException:Fragment XXXFragment not attached to a context.

字面意思理解,fragment无法和上下文关联。其实就是fragment还没有添加到activity中,我在代码中使用了getResources(),由于一些原因fragment还没有添加到activity时就调用了该方法,导致报错,看源码:

 /**
     * Return <code>requireActivity().getResources()</code>.
     */
    @NonNull
    final public Resources getResources() {
        return requireContext().getResources();
    }

/**
     * Return the {@link Context} this fragment is currently associated with.
     *
     * @throws IllegalStateException if not currently associated with a context.
     * @see #getContext()
     */
    @NonNull
    public final Context requireContext() {
        Context context = getContext();
        if (context == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to a context.");
        }
        return context;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在context为空时会爆出该异常
解决办法:使用fragment自带方法isAdd(),添加判断即可

 /**
     * Return true if the fragment is currently added to its activity.
     */
    final public boolean isAdded() {
        return mHost != null && mAdded;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.oss上传视频或图片不走回调接口

在华为9.0版本手机中使用oss上传视频或图片没有走回调,一加6T中无问题,多次测试9.0以下无问题,已经做了兼容http的配置,推测是高版本兼容问题
oss代码如下:

Map<String, String> completeParams = new HashMap<>();
completeParams.put(KEY_UPLOAD_COMPLETE_FILE_PATH, filePath);
completeParams.put(KEY_UPLOAD_COMPLETE_URL, targetURL);

PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, targetURL, filePath);
putObjectRequest.setCallbackParam(completeParams);
OSSAsyncTask task = oss.asyncPutObject(putObjectRequest, this);
taskTable.put(filePath, task);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

解决方案升级oss的sdk版本到 2.9.0 以上,api ‘com.aliyun.dpa:oss-android-sdk:+’,现在最新版为 2.9.2

参考链接:https://blog.csdn.net/weixin_33814685/article/details/87992779

3.无法运行app(please select android sdk)

① 删除项目 .idea文件夹下面的 library 文件夹

② sync 同步项目

问题就可以解决。原因是涉及到 gradle 与 ide 之间对依赖的解析和识别过程出现了问题,sdk 也是作为库去识别的,删除之后重新生成可以解决这个问题。

参考链接:https://www.cnblogs.com/aimqqroad-13/p/9313650.html

4.kotlin-stdlib-jre7 is deprecated. Please use kotlin-stdlib-jdk7 instead

找到module 的build.gradle 中的implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"替换成implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

5.Can’t change tag of fragment

fragment加载重复,检查是否适配器多次调用

6.Caused by: java.lang.NoSuchMethodError: No virtual method keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; in class Ljava/util/concurrent/ConcurrentHashMap; or its super classes (declaration of ‘java.util.concurrent.ConcurrentHashMap’ appears in /system/framework/core-oj.jar)

在这里插入图片描述

7. Two-way binding with string concatenation operator (+) only supports the empty string constant (`` or “”)

在这里插入图片描述
去掉"="号

8.Gradle sync failed: Already disposed: Module: ‘***’

删除主工程目录下的.idea文件夹,重启

9.The APK file does not exist on disk

打开AndroidStudio右边的侧边栏,刷新gradle配置
在这里插入图片描述

9. ./gradlew: Permission denied

MacBook-Pro:meidapaydinner rockphoenix$ ./gradlew processDebugManifest -stacktrace
bash: ./gradlew: Permission denied
  • 1
  • 2

解决方法:输入 chmod +x gradlew

10. Manifest merger failed with multiple errors, see logs

项目添加aar报错,在Terminal输入第九条bug中的指令:

./gradlew processDebugManifest -stacktrace
  • 1

在这里插入图片描述
可以发现是版本问题,升级至21即可

11.kotlin.NotImplementedError: An operation is not implemented: Not yet implemented

override fun getBundleExtras(extras: Bundle?) {
        TODO("Not yet implemented")
    }
  • 1
  • 2
  • 3

去掉TODO即可

12.AndroidStudio无法创建Activity

原因:signingConfigs中不能出现debug字样,将其替换成自定义文本名
参考链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/253110
推荐阅读
相关标签
  

闽ICP备14008679号