开发过程中碰到的各种问题

2022-01-23  本文已影响0人  北疆小兵

解决办法: 1. 执行 adb shell settings put global package_verifier_enable 0
2.adb shell settings put global verifier_verify_adb_installs 0

  1. 手动用 adb install -t 安装
    4.再直接运行就可以安装成功了
 java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.apache.demo/com.apache.demo/.SoundBoxMsgService (has extras) }: app is in background uid null

java.lang.RuntimeException: Unable to instantiate application

原因 framework.jar 是使用 implementation 而不是 compileOnly 的方式,改为 compileOnly 就可以了

image.png image.png image.png

搜狗输入法的英文输入法快捷键和 AS 的快捷键冲突了,参考: https://www.cnblogs.com/liuwenpeng/p/12332246.html

 <category android:name="android.intent.category.LAUNCHER" />
env: bash\r: No such file or directory

解决办法: https://blog.csdn.net/u012452490/article/details/102546481

解决办法:https://stackoverflow.com/questions/30474767/no-tests-found-for-given-includes-error-when-running-parameterized-unit-test-in

image.png

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction > java.lang.reflect.InvocationTargetException (no error message)

解决办法: https://stackoverflow.com/questions/62131564/a-failure-occurred-while-executing-org-jetbrains-kotlin-gradle-internal-kaptexec?noredirect=1
修改gradle -> jdk 版本引用

image.png

当我们确定Item的改变不会影响RecyclerView的宽高的时候可以设置setHasFixedSize(true),并通过Adapter的增删改插方法去刷新RecyclerView,而不是通过notifyDataSetChanged()。(其实可以直接设置为true,当需要改变宽高的时候就用notifyDataSetChanged()去整体刷新一下)


2021-07-18 18:04:40.297 1876-2053/com.kidsedu D/OKHttp: 接收响应(247.5ms): [http://kids.test.edu.tcljd.com/api/system/getUpdateInfo?packageName=com.kidsedu] 
    Server: openresty/1.15.8.3
    Date: Wed, 21 Jul 2021 10:04:40 GMT
    Content-Type: application/json
    Transfer-Encoding: chunked
    Connection: keep-alive
    {"code":0,"msg":"Success","data":""}

报错位置

2021-07-18 18:04:40.303 1876-2053/com.kidsedu E/GsonResponseBodyConverter: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 35 path $.data
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
        at com.kidsedu.retrofit.convertor.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:36)
        at com.kidsedu.retrofit.convertor.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:21)
        at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)
        at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)
        at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:112)
        at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 35 path $.data

代码如下:

public class OverseaCaputreViewModel extends ViewModel{
  
    public OverseaCaputreViewModel(boolean notLoadData) {
        NLog.d(TAG, "cosntructor OverseaCaputreViewModel notLoadData");
    }
}

解决办法:增加无参构造器

原因是ViewModel不是设置为public

image.png

代码如下:

 @Override
    public MainHeaderViewHolder onCreateHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_head, parent, false);
      
        return new MainHeaderViewHolder(itemView);
    }

原因是banner中使用viewPage2,viewPage2要求设置子item的需要长或者宽度为match_paren

改为以下就可以了

 @Override
    public MainHeaderViewHolder onCreateHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_head, parent, false);
        //注意,必须设置为match_parent,这个是viewpager2强制要求的
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT);
        itemView.setLayoutParams(params);
        return new MainHeaderViewHolder(itemView);
    }


    public MutableLiveData<Boolean> mLoading = new MutableLiveData<>();
if (mWechatViewModel.mLoading.getValue()){
 
 }

报空指针异常
MutableLiveData Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object

原因是mWechatViewModel.mLoading.getValue 获得的值为null, if中会自动把null转换为boolean值, 改为以下写法就可以了

 if (mWechatViewModel.mLoading.getValue() != null){
}
自己代码中的问题:
代码中的url是通过接口返回的,存贮到了变量中,在机器内存被回收后,这部分变量值变为了“”,导致出现的这个问题;
修改后
1获取到配置信息后通过工具类的set方法将信息缓存到内存中变量一份,
2.然后再通过SP缓存到本地一份
使用时通过工具类的get方法获取
1.判断内存中变量是否未空,不为空则返回
2.为空,则通过SP从本地获取,然后赋值给内存中变量,最后返回内存中变量

   public void setAccountHasPwdInfo(boolean hasPwd) {
        setBooleanValue("hasPwd_"+UserInfoManager.getInstance().getAccountId(), hasPwd);
    }
  1. git自动补全命令不生效

虽然按照网上的教程在.bash_profile中做了配置,但是git自动补全命令还是无法生效,原因是通过brew按照的git-completion.bash 和本地安装的git版本不一致

  1. adb 命令提示
zsh: command not found: adb

用自己mac上的android studio 和 sdk 发送到公司新电脑的,无法识别adb命令,studio也无法识别设备. .bahs_profile 中配置了

export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

也没有作用,后面重新下了android studio 和 sdk,就可以了。初步怀疑是platform-tools 和 tools 跟android studio 不匹配

命令行执行 sudo spctl --master-disable

an error has occurred see the log file

解决办法是 右键 mat -> 显示包内容 -> content -> Eclipse -> MemoryAnalyzer.ini , 修改这个MemoryAnalyzer.ini文件 为

-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
-data
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.700.v20180518-1200
-vm
-vmargs
-Xmx1024m
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread

解决办法: mat不能直接打开studio导出的hprof文件,需要在打开命令行窗口,SDK目录,执行以下命令:

hprof-conv  1.hprof   2.hprof

然后再次打开MAT程序,打开2.hprof文件,就可以看到正确的分析界面啦!

        mHomeViewModel = new ViewModelProvider(this).get("HomeFragment", HomeViewModel.class);

通过日志打印,发现旋转屏幕后生成的ViewModel和旋转屏幕前的ViewModel不是同一个。进一步发现Fragment生命周期走了两次,通过查看资料发现旋转屏幕fragment周期是会走两次的(我自己写的Demo貌似只会走一次,先不管了)。 思考为什么旋转屏幕后ViewModel会变呢? 原来是ViewModel的实例化姿势不对
改成

        mHomeViewModel = new ViewModelProvider(getActivity()).get("HomeFragment", HomeViewModel.class);

上一篇 下一篇

猜你喜欢

热点阅读