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项目即可解决,
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