AndroidStudio开发遇见问题总结

持续更新,以便查阅

1:cant resolve sympbol RecyclerView

说明添加的依赖有问题,按照路径D:\ANDROIDSDK\extras\android\m2repository\com\android\support\recyclerview-v7,看自己sdk中实际有什么依赖来看 去添加依赖。

红框内这一项要和电脑中的版本对应上。还有一种情况是:程序中没有加载上RecyclerView

2:在接手别人的项目时 经常会遇见不知道当前运行的是哪个activity

在androidStudio中,当使用真机或者模拟器调试应用时,应用运行到某一个页面。而开发人员不知道当前UI的类的时候,可以通过如下命令快速找到对应的activity.

可以打开androidStudio自带的终端,定位到SDK的adb文件下面。

这是定位方法

D:\Aldx\DeviceManagerApp11>cd D:\ANDROIDSDK\platform-tools

分开输入,先输入adb shell

然后再输入 dumpsys activity | grep 'mFoc'
3:在开发中需要数学计算时 的一个工具类

public class Arith {
    /**
     * 提供精确加法计算的add方法
     *
     * @param value1 被加数
     * @param value2 加数
     * @return 两个参数的和
     */
    public static double add(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.add(b2).doubleValue();
    }

    /**
     * 提供精确减法运算的sub方法
     *
     * @param value1 被减数
     * @param value2 减数
     * @return 两个参数的差
     */
    public static double sub(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 提供精确乘法运算的mul方法
     *
     * @param value1 被乘数
     * @param value2 乘数
     * @return 两个参数的积
     */
    public static double mul(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 提供精确的除法运算方法div
     *
     * @param value1 被除数
     * @param value2 除数
     * @param scale  精确范围
     * @return 两个参数的商
     * @throws IllegalAccessException
     */
    public static double div(double value1, double value2, int scale) throws IllegalAccessException {
        //如果精确范围小于0,抛出异常信息
        if (scale < 0) {
            throw new IllegalAccessException("精确度不能小于0");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        //默认保留两位会有错误,这里设置保留小数点后4位
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}

3 报错Service not registered

执行UnBindService时报错Service not registered

服务未注册,其实就是要先bindService(),才可以运行UnBindService();

4 当界面上面有EditText时 进入界面会弹出软键盘,在manifest中注册这个Activity里面加上这两行代码

<activity
    android:name=".Information_device"
    android:label="设备列表"
    android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
    android:configChanges="keyboardHidden|orientation|screenSize"
    />

5、权限报错java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.huawei.camera/.ThirdCamera } from ProcessRecord{d9cfe43 20572:ldx.cam_01/u0a514} (pid=20572, uid=10514) with revoked permission android.permission.CAMERA我要做的是一个拍照的demo本来不需要申请权限,我想着后面可能会用到就直接给加上了,结果就报这个错,把权限注释掉就可以了!

6、android 6.0之后运行时需要权限,只在AndroidManifest中申请权限不行,需要在代码中判断是否有权限,没有的话要再次申请权限,即加上如下代码(以读取文件为例):

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }

再附上一个报的错误:ava.io.FileNotFoundException: /storage/emulated/0/temp.png: open failed: EACCES (Permission denied) 注意:如果是Permission denied可能就是没有申请到权限

2021.07.29新增,今天创建文件报错

java.io.IOException: No such file or directory

查询资料知 : 安卓10.0新特性 文件分区管理存储;文件权限需要在Manifest中新增这条属性

        android:requestLegacyExternalStorage="true"

7、Android studio 字符串换行用"\n"————年纪大了脑子不好使,这都要记下来。。。

截取字符串subString:String ss=“这是需要被截取的字符串”

String s1=ss.subString(a,b);a,b是两个数值是字符串的起始位置和结束位置的索引,左闭右开。

8、获取当前日期的前几天或后几天的日期:这个是转的别人的

/**
 * 获取前n天日期、后n天日期
 *
 * @param distanceDay 前几天 如获取前7天日期则传-7即可;如果后7天则传7
 * @return
 */
public static String getOldDate(int distanceDay) {
    SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
    Date beginDate = new Date();
    Calendar date = Calendar.getInstance();
    date.setTime(beginDate);
    date.set(Calendar.DATE, date.get(Calendar.DATE) + distanceDay);
    Date endDate = null;
    try {
        endDate = dft.parse(dft.format(date.getTime()));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    //Log.i(TAG, "getOldDate: " + dft.format(endDate));
    return dft.format(endDate);
}

9、在方法的最后返回值那块代码不能通过做判断去设置返回值,这样会始终只走最后一个return,应该重新赋值最后只有一个return

    Boolean b=Date.contains("|");
        List<InspectionWorks> list3=new ArrayList<>();
        if (b) {
           list3=list1;
        }
        if (!b){
           list3=list2;
        }

        return list3;
    }

10、如果想替换掉ArrayList中的某一项,可以使用方法list.set(i,String);

11、

解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求

方案1: 在程序的web.config 中system.web 节点 里面插入 <httpRuntime maxRequestLength="999999999" maxQueryStringLength="2097151" />  代码。再次运行,失败

方案2:对IIS 中的applicationHost.config 配置文件进行配置。再次运行,失败

方案3:在程序的web.config 中sconfiguration 节点 里面插入

<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" maxQueryString="2147483647"/>
</requestFiltering>
</security>
</system.webServer>

 代码。再次运行,失败

不行!头有点大。。经过一番尝试后发现终极解决办法:

就是 方案1 + 方案3 的结合体,再次尝试,运行通过。

以上解决办法 是复制的别人的!

12、这个问题是一个困扰我很久的问题,有时候就连接不上服务器,报错是这个:

java.net.ConnectException: failed to connect to /192.168.1.108 (port 8088) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host)

找到的答案1:找不到去往主机的路由。意思就是网络暂时被堵了。

13、Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry has been closed.

去了趟厕所回来报这个错,解决办法:

File->Invalidate Cache/ReStart即可

14、在使用文件选择器lFilePicker时 只能查看很少的文件,反正不是手机中所有的文件,找了半天发现原因是lFilePicker文件选择器,没有自动获取权限

if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}

15、ProgressDialog 不显示:我这次遇见的问题是  开启的子线程是实现的Runnable接口,继承Thread类就可以了。具体是为什么我也不太清楚,如果您知道,欢迎您留言告知,谢谢——2019年7月6日

16、最近项目进厂调试,用了十几个手机都没有问题,有一个工程师手机打开APP就闪退,报错android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class TextView,刚开始只知道问题出在TextView ,在网上查询了很多资料,有是因为设置属性时Color,有是Drawable,后来排查属性时发现是TextSize属性导致的,我是在用dimens设置字体大小,后来想到是不是我的dimens没有为这个屏幕尺寸设置对应的dimens,果断获取当前手机的尺寸,新加values ——>bingo,解决问题!——2019年7月17日

17、Unable to start activity ComponentInfo{com.example.chapter01_01/com.example.chapter01_01.chapter4.SimpleUseFragment}: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class fragment

造成这个错误的原因有很多。我的是因为没有为fragment指定ID--!——2019年10月20日

18、Android 布局被华为手机的下方的虚拟按键挡住

    我遇见过两次这个问题,都是ScrollView 第一次ScrollView的父布局是LinearLayout,我设置了这两个属性就可以了

   <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:scrollbars="vertical"
        android:paddingBottom="3dp">

第二次 scrollView的父布局是ConstraintLayout,设置这个属性不管用。后来将scrollView的底部constrain在父布局的底部 就没有这个问题了。如下代码:

  <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:scrollbars="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        android:paddingBottom="3dp"
        app:layout_constraintTop_toBottomOf="@+id/tv_BaseMessage">

这个情况是我scrollView的父布局 就是最外部的布局。其实将scrollView放在一个线性布局中,将线性布局与最外层布局绑定,也可以解决这个问题。

19、NumberPicker 二级联动或三级联动时,当父级Np变化时 对应的子级Np也跟着变化,子级数量不确定时,就是说,子级的数量会根据父级的变化而变化时,会报错数据越界,这里先记录一下解决办法,具体原因,以后再深究,try里面的代码是解决办法。

 np_DeviceName.setOnValueChangedListener((picker, oldVal, newVal) -> {
                /*
                 * 同一个设备有多个设备编码时就会报错
                 * */
                List<String> tmp_DeviceCodeList = get_tmp_DeviceCodeList(arr_DeviceName[newVal], list1);
                String s = arr_DeviceName[newVal];
                arr_DeviceCode = new String[tmp_DeviceCodeList.size()];
                for (int i = 0; i < tmp_DeviceCodeList.size(); i++) {
                    arr_DeviceCode[i] = tmp_DeviceCodeList.get(i).toString();
                }
                try {
                    if (arr_DeviceCode.length - 1 > np_DeviceCode.getMaxValue()) {
                        np_DeviceCode.setDisplayedValues(arr_DeviceCode);
                        np_DeviceCode.setMaxValue(arr_DeviceCode.length - 1);
                    } else {
                        np_DeviceCode.setMaxValue(arr_DeviceCode.length - 1);
                        np_DeviceCode.setDisplayedValues(arr_DeviceCode);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.i(TAG, "iniBaseView: ");
                }
                /*当NumberPicker的值得数量发生变化时 会出问题,所以必须放这个*/
            });

20 Android Studio 报错:ERROR: Cause: unable to find valid certification path to requested target

第一步 改成这个

repositories {
    maven { url 'https://maven.aliyun.com/repository/public' }
    maven { url 'https://maven.aliyun.com/repository/google' }
    maven { url 'https://maven.aliyun.com/repository/jcenter' }

    google()
    jcenter()

}

第二步,可能是网络的问题,搞了半天,用手机开热点  就很顺利

如果不行:新建一个项目试试。

FYI:多sync几次

21、RecyclerView最下面有一行显示不全

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvSpendDetail"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@+id/viewLine"
        app:layout_constraintVertical_weight="1" />

这里我使用权重来设置RecyclerView的高度,最后一行先是不全的原因是RecyclerView的底部没有和父布局ConstraintLayout绑定,加上

app:layout_constraintBottom_toBottomOf="parent"

就可以了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio是一个非常强大的Android应用程序开发工具,它提供了许多功能和工具,可以帮助开发人员轻松地创建高质量的Android应用程序。以下是使用Android Studio进行Android应用程序开发的一些步骤: 1.安装Android Studio并创建新项目 首先,您需要从官方网站(https://developer.android.google.cn/studio)下载并安装Android Studio。安装完成后,您可以打开Android Studio并创建一个新项目。在创建新项目时,您需要选择应用程序的名称,包名称和目标设备等信息。 2.设计应用程序界面 Android Studio提供了一个名为“布局编辑器”的工具,可以帮助您设计应用程序的用户界面。您可以使用布局编辑器添加各种UI元素,例如按钮,文本框和图像等。 3.编写应用程序代码 在Android Studio中,您可以使用Java或Kotlin编写应用程序代码。您可以使用Android Studio提供的代码编辑器编写代码,并使用调试工具调试代码。 4.构建和运行应用程序 在编写完应用程序代码后,您可以使用Android Studio构建应用程序并将其运行在模拟器或实际设备上。Android Studio提供了一个名为“AVD Manager”的工具,可以帮助您创建和管理Android虚拟设备。 5.测试和发布应用程序 在构建和运行应用程序后,您可以使用Android Studio提供的测试工具测试应用程序。如果应用程序通过了测试,您可以使用Android Studio将其打包并发布到Google Play商店或其他应用程序商店。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值