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

来源:互联网 发布:linux中scp命令 编辑:程序博客网 时间:2024/06/10 14:01

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文件是否被写入代理

1 0
原创粉丝点击