纪念那些年我曾爬过的坑(持续更新)

1.使用3DES加密解密的时候注意进制转换。

2.使用Studio导入项目时需配置使用本地gradle。

3.使用Studio导入第三方时,需配置正确maven参数才可正常导入(删除无影响)。

4.使用Volley网络请求框架,配置参数都正确,与后台联调发现每次请求都发2次,后来查找原因才发现这算是volley的一个bug吧。

5.MAC配置gradle :打开终端,输入open -e .bash_profile,

export GRADLE_HOME=/Users/ZDD/ZDD/gradle-2.8/bin;
export SDK_PATH=/Users/ZDD/Library/Android/sdk/platform-tools;
export PATH=${PATH}:${SDK_PATH}:${GRADLE_HOME}

然后 保存,输入source ~/.bash_profile

6.Listview没有点击事件。 到Item顶层布局中加入android:descendantFocusability="blocksDescendants"属性

7.MAC中.gradle文件夹是存在的。目录在/Users/ZDD/.gradle/

8.Android M 以上版本,申请权限时,记得不管是normal还是danger都需要在Manifest里注册

9.Android Studio创建DrawLayout或者NavigationView等控件时会出现Missing Style等错误,需要选择        AppTheme.Compat视图再切换回来就正常了。

10.使用ToolBar代替ActionBar时setsupportActionBar(toolbar) 只能在onCreateOptionsMenu中inflate布局,如果不使用setSupportActionBar(toolbar)这个方法,就可以使用toolbar.inflatemenu()这个方法加载布局。

11.使用videoView空间播放RAW中MP4文件,使用setVieoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.video))无法播放视频,只能使用setVieoPath("android.resource://"+getPackageName()+"/"+R.raw.video)或者读取raw文件保存在SD卡中使用setVieoPath(Environment.getExternalStorageDirectory().getAbsolutePath()+"/startvideo.mp4")即可。

12.Android 6.0 只要应用targetSdkVersion为22以下,在6.0设备上运行不需要做权限处理,比如读取SD卡操作可以正常运行。

13.toolBar更改图标代码:(ActionMenuItemView)view.findViewById(R.id.menuitem).setIcon();

14.上传jcenter遇到Execution failed for task ':core:lint'错误,解决方法在moudle的gradle下添加

android {
lintOptions {
abortOnError false
}
}代码即可.

15.上传jcenter遇到Execution failed for task ':core:mavenAndroidJavadocs'错误,解决方法在project的gradle下添加allprojects {
repositories {jcenter()}
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}}即可。

16.上传jcenter遇到http401错误,解决方法是正确的配置用户名和key

17.Studio 报错:libpng error not a png file,原因是资源文件中有些图片本身不是png格式,只是修改了后缀名导致的。

18.Studio运行项目时报Duplicate files copied in APK META-INF/...  :file1:...file2:...    解决办法在build文件android下输入如下代码即可,其中...代表是报错文件名称.

packagingOptions {
        exclude 'META-INF/...'
}

19.解决华为设备无法输出Log
华为手机:进入拨号界面输入:*#*#2846579#*#*
华为pad:打开自带计算器输入引号中的内容(不包含引号)“()()2846579()()=”
进入工程模式,依次选择ProjectMenu---后台设置----LOG设置---LOG开关 点击打开.

20.打包时找不到native方法,可能由于arm64-v8a,armeabi,armeabi-v7a...缺少,可以在app.gradle中defaultConfig下加上ndk过滤代码,如 ndk{abiFilters "armeabi"}

21.在编码时使用setOnClickListener(this)等方法时,一定要在onDestory方法中使之为空,防止内存溢出.

22.当父布局引用.9图作为背景时,会出现布局异常,解决方案:用Relative嵌套一个ImageView去引用它.

23.使用TextInputLayout模式设置为password时,更改右侧图标使用passwordToggleDrawable属性,使之隐藏属性为passwordToggleEnabled=false。

24.使用EditText控件时,在顶层布局上添加属性focusable=true,focusableInTouchMode=true,则点击除EditText之外的区域,会使得EditText失去焦点,直接隐藏键盘即可。

25.XML解析方法:

InputStream input = asset.open("province_data.xml");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
XmlParserHandler handler = new XmlParserHandler();
parser.parse(input, handler);
input.close();
provinceList = handler.getDataList();

26.找不到源码?试试在.AndroidStudio2.1\config\options目录下找到jdk.table.xml在对应平台下替换如下代码

<sourcePath>
          <root type="composite">
            <root type="simple" url="file://$USER_HOME$/Android/sdk/sources/android-24" />
          </root>
</sourcePath>

27.RecyclerView的getAdapterPosition和getLayoutPosition主要区别在于:

Adapter和layout的位置会有时间差(<16ms),如果改变了Adapter的数据,然后刷新视图,layout需要过一段时间才会更新视图,在这段时间里,这两个方法返回的position会不一样。

在notifyDataSetChanged之后并不能马上获取adapter中的position,要等布局结束之后才能获取到。

对于layout的position,在notifyItemInserted之后,Layout并不能马上获取到新的position,因为布局还没有更新(需要<16ms的时间刷新视图),所以只能获取到旧的,但是Adapter中的position就可以马上获取到最新的position.

28.Html5启动App方法如下:

html端设置window.location.href='[scheme]://[host]/[pathPrefix]?name=zhangsan&age=18'

href->myapp://js.app/start?name...

App端:在Manifest.xml的Activity下追加<intent-filter>内容,注意:如果<intent-filter>中内容【android.intent.action.MAIN】和【android.intent.category.LAUNCHER】这两个,千万不能写在同一个<intent-filter>中,会导致应用启动图标在桌面消失等问题。必须按照如下格式写:

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
    <action android:name="android.intent.action.VIEW"/>

    <category android:name="android.intent.category.BROWSABLE"/>
    <category android:name="android.intent.category.DEFAULT"/>

    <data
        android:host="myapp"
        android:pathPrefix="/start"
        android:scheme="js.app"/>
</intent-filter>

29.application下allowBackup属性默认为true,会导致信息外漏,可以通过打开调试开关,输入

adb backup -f back.ab -noapk com.xxx.xx备份数据到电脑,此时再换一台设备安装此应用执行

adb restore back.ab可以恢复数据。

另外还可以通过backup-extractor解密出内容。所以一般为了安全起见,把它设置为false。

30.在某页面做到手机无法截屏,需在Activity中加入这段代码:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

31.使用RxBus发送一条消息,接收时出现接收多次,导致问题原因是onDestory方法里没有unsubscribe()掉。

32.Service在Android5.0之后只能显示启动:

Intent intent=new Intent(context,MyService.class);

或者:Intent intent=new Intent("Service的action").setPackage("包名")。

33.Draw贪吃蛇追踪曲线方法:ObjectAnimator animator=new ObjectAnimator.ofFloat(PathView.thi,"percent",0.0f,1.0f);

animator.setDuration(3000);

animator.start();

create function  private void setPercent(float percent){

mPaint.setPathEffect(new DashPathEffect(new float[]{percent*length,length},0));

invalidate();

}

则ObjectAnimator会自动调用类中自定义方法setPercent(XXX).

34.Text自带滚动 设置scrollbar属性为vertical,代码设置

textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 

35.获取Maven私服aar文件时,如遇到项目死活编译不通过问题,就查看一下gradle.properties文件是否被写入代理

36.获取泛型类型

Type[] types = class.getClass().getGenericInterfaces();
List<Type> needtypes = new ArrayList<>();
for (Type paramType : types) {
    if (paramType instanceof ParameterizedType) {// if Type is T
        Type[] parentypes = ((ParameterizedType) paramType).getActualTypeArguments();
        for (Type childtype : parentypes) {
            needtypes.add(childtype);
            if (childtype instanceof ParameterizedType) {
                Type[] childtypes = ((ParameterizedType) childtype).getActualTypeArguments();
                    for (Type type : childtypes) {
                            needtypes.add(type);
                    }
            }
        }
    }
}

37.导出Android ANR日志命令——adb pull /data/anr/traces.txt  C:\

38.如若出现 No static method split_lib_dependencies_apk.apk问题,原因是项目中引用了不同版本的库导致

39.实现Fragment 懒加载功能,可以在onHiddenChanged(hidden)方法中加一个允许执行一次的Boolean变量去实现

40.android studio platform tools 27.0.0版本对Pixel 手机有BUG,连不上ADB,并且影响所有其他设备

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值