android 常见问题

android 常见问题

1.Error:Could not read cache value from .gradle/daemon/2.10/registry.bin'.

这个主要是因为gradle版本的问题,比较简单粗暴的解决办法就是查看一下可以正常编译执行的项目中的“gradle/wrapper/gradle-wrapper.properties”文件,拷贝distributionUrl 后面的gradle的版本路径到新项目就可以。

或者 通过rm -rf ~/.gradle/daemon/ 删掉缓存

或者将下好的gradle插件粘贴在目录C:\Users\Administrator.gradle\wrapper\dists\gradle-4.1-all\此随机字符串\,并且将gradle.properties文件下的gradle版本改为gradle-4.1-all,然后重新build项目。

2.Sharepreference的保存丢失数据问题

使用Application级别的context并且尽量避免在短暂的生命周期操作数据如onDestory()里面

3.textview、button的内部计时器

package com.teeking.android.assistant;

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

/**
 * @author 紫灰机
 * @Description: button计时器
 * @data 2018/7/25 10:57
 */
public class test extends AppCompatActivity{

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    activity = this;
    btnGetCode = findViewById(R.id.btnGetCode);
    btnGetCode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            timer.start();
        }
    });
}

Activity activity;
Button btnGetCode;
//60000代表的是 60秒每隔1秒去更改btnGetCode获取验证码按钮的显示的时间(执行onTick()方法)
//60秒之后执行onFinish()。
//+500避免内部计时器通过精确的时间(非整毫秒数)折算的计时时间不准
private CountDownTimer timer = new CountDownTimer(10000 + 500, 1000) {
    //我们在这里去更改定时改变的东西
    @Override
    public void onTick(long millisUntilFinished) {
        if (activity != null) {
            btnGetCode.setClickable(false);
            String str = "秒后重新发送";
            if (millisUntilFinished / 1000 == 0) {
                onFinish();
            } else {
                str = millisUntilFinished / 1000 + str;
                btnGetCode.setText(str);
            }
        }
    }

    //60秒执行完之后,执行的方法。
    @Override
    public void onFinish() {
        btnGetCode.setText("重新获取");
        btnGetCode.setEnabled(true);
        btnGetCode.setClickable(true);
    }

};

@Override
protected void onDestroy() {
    super.onDestroy();
    if (timer != null) {
        timer.cancel();
        }
    }
}

4.Error:Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForApiDveDebug'.> A problem occurred starting process 'command 'F:\androidFile\android-sdk\ndk-bundle\toolchains\mips64el-linux-android-4.9\prebuilt\windows-x86_64\bin\mips64el-linux-android-strip''

ndk更新至最新版引起的问题,文件不完整导致的错误,重新下载r15的版本的ndk放在F:\androidFile\android-sdk\ndk-bundle目录下,build项目即可解决,

戳我跳转r15c下载windows64位

戳我跳转r15c下载windows32位

戳我跳转r15c下载macox

戳我跳转r15c下载linux64

5.解决ScrollView嵌套滑动不流畅,横竖向的滑动冲突

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class ScrollViewExtend extends ScrollView {
    // 滑动x、y方向距离及最后的坐标
    private float xDistance, yDistance, xLast, yLast;

    public ScrollViewExtend(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                xDistance = yDistance = 0f;
                xLast = ev.getX();
                yLast = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                final float curX = ev.getX();
                final float curY = ev.getY();
                xDistance += Math.abs(curX - xLast);
                yDistance += Math.abs(curY - yLast);
                xLast = curX;
                yLast = curY;
                if(xDistance > yDistance){
                    return false;
                }
        }
        return super.onInterceptTouchEvent(ev);
    }
}

6.集合遍历删除重复问题

for ( int i = 0; i <uploadList.size(); i++) {
String value = uploadList.get(i);
if (TextUtils.isEmpty(value)) {
    uploadList.remove(value);  // ok
    i--; // *因为位置发生改变,所以必须修改i的位置 *
    }
}

7.动态设置控件(列表图片)的宽高,需要后台存储的尺寸统一,适配

DisplayMetrics dm = mContext.getResources ().getDisplayMetrics();
RelativeLayout.LayoutParams linearParams = (RelativeLayout.LayoutParams) ivCover.getLayoutParams(); // 取控件topCover当前的布局参数
linearParams.width = (int)(dm.widthPixels*0.366);
linearParams.height = (int)(dm.widthPixels*0.55);
ivCover.setLayoutParams(linearParams);

8.禁用terminal和goole等关联的插件可以提升编译速度(不建议),maven不能去掉,编译器主要还是依赖jcenter管理

9.Error:Timeoutwaitingto lockcpprojclass cachefor buildfile 'D:\project\AisenWeiBo\app\build.gradle' (C:\Users\Administrator.gradle\caches\2.10\scripts\build2aq0trptuf9v7vm1msy3w14bo\cpproj). Itis currentlyin use byanotherGradleinstance. OwnerPID: unknown OurPID: 12736 OwnerOperation: unknown Ouroperation: Initializecache Lockfile: C:\Users\Administrator.gradle\caches\2.10\scripts\build2aq0trptuf9v7vm1msy3w14bo\cp_proj\cache.properties.lock

需要先关闭java.exe然后将Lock file后面的文件删除,重启IDE即可。

10.Gradlesyncfailed: Nosuchproperty: POMDEVELOPERNAMEfor class: org.gradle.api.publication.maven.internal.pom.CustomModelBuilder

这个错误可能是因为作者项目发布的时候填写了一些信息,而现在这些属性值找不到造成的,因此填写对应的属性值为NULL即可

11.Error:Executionfailedfor task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicateentry: android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.class

jar包重复,去除重复的即可。

12.Error:Unknownhost 'downloads.gradle.org'. Youmayneedto adjusttheproxysettingsin Gradle. EnableGradle 'offline mode' and syncprojectLearnaboutconfiguringHTTPproxiesin Gradle

翻墙即可。

13.软键盘监控

https://blog.youkuaiyun.com/u011181222/article/details/52043001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值