Android开发易错

    在安卓开发中,遇到的各种坑,现在找个时间把这些错误整理下来,分享给各位,希望你们不要重走我犯下的错误,同时,也对我这段时间的开发的错误,重新温习下。
  • ViewPager的报错:ViewPager does not have a PagerAdapter set

    原因分析:
    因为没有设置adapter 就开始使用ViewPager了,例如我这里mTabLayout.setupWithViewPager(mViewPager);就在mViewPager.setAdapter(adapter);的前面使用了.

  • android编程时,当打开一个activity时,经常会因为内部存在editText类的组件,自动出现软键盘,影响视觉效果。

    解决办法:将editText的焦点换成别的组件,像TextView,Button等等,这样就不会出现软键盘了。

    先了解两句代码:
    View.setFocusable(true),对应xml : android:focusable=”true”.
    View.setFocusableInTouchMode(true),对应xml : android:focusableInTouchMode=”true”.
    两者的意思是让组件可以获得焦点。不过有些区别,前者执行false条件后,在执行true,还是不能获取焦点。后者执行上述过程,还是能获取焦点。
    当你加入上述代码后,在创建activity时,调用对应view的requestFocus(),这样就可以获得焦点了。当editText失去焦点了,也就不会有软键盘了.

  • Fragment嵌套Fragment要用getChildFragmentManager

  • 出现TextView.setText();出错的原因:
    原因:setText()有两种方法:
    一、final void setText(int resid);接收int型参数时,调用的是第一个方法,系统会去R文件里面找int值匹配的String值,在R文件里找不到这个值,所以会报错。
    二、final void setText(CharSequence text);
    如果你的R里没有对应的int值,但你还是想显示出int值,可以采用方法:setText(”“+int);

  • 当我们采用LinearLayout布局时,有特殊情况需要注意:
    1、对于 LinearLayout :

当 android:orientation=vertical (垂直) 时,只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。

当 android:orientation=horizontal (水平) 时,只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。

2、对于 FrameLayout : 任意android:layout_gravity属性都有效,可以非常方便实现对组件的布局。

  • 这是java基础知识,用Java获取字符串长度,Java获取数组大小,Java获取集合大小,一一说明
    字符串通过length()方法:str.length()
    数组通过length属性:arr.length
    集合通过size()方法:list.size()
  • 编译器android.content.res.Resources$NotFoundException: String resource ID #0x1报错

原因:一般发生在参数 int resId 错误,你把String赋值给int的resId,所以编译器找不到正确的resource于是报错。
最简单的例子,检查一下你的Toast.makeText()啊textView.setText啊之类的函数,这种函数通常有几个重载,如:
textView.setText(CharSequence text);
textView.setText(int resId);
……
如果不小心将一个int值传给了它,那它不会显示该int值,而是跑到工程下去找一个对应的resource的id,当然是找不到的,于是就报错啦。

  • List.add() 和 List.addAll() 的区别

List.add() 方法,也是往List 中增加list,但是,它增加的是一个List 实例
List.addAll()方法,就是规定了,自己的这个List 就是容器,往里面增加的List 实例,增加到里面后,都会被看成对象。
当需要把多个List 实例放到一起的时候,必须使用List.addAll()方法.

  • 格式化数字

0 一个数字
一个数字,不包括 0
. 小数的分隔符的占位符
DecimalFormat df1 = new DecimalFormat(“0.0”);
DecimalFormat df2 = new DecimalFormat(“#.#”);
DecimalFormat df3 = new DecimalFormat(“000.000”);
DecimalFormat df4 = new DecimalFormat(“###.###”);
System.out.println(df1.format(12.34));
System.out.println(df2.format(12.34));
System.out.println(df3.format(12.34));
System.out.println(df4.format(12.34));
结果:
12.3
12.3
012.340
12.34

  • 代码中设置颜色主要两种
    第1种:tv.setTextColor(Color.RED);//系统自带的颜色类
    第2种:tv.setTextColor(0xffff00ff);//0xffff00ff是int类型的数据,分组一下0x|ff|ff00ff,0x是代表颜色整数的标记,ff是表示透明度,ff00ff表示颜色,注意:这里ffff00ff必须是8个的颜色表示,不接受ff00ff这种6个的颜色表示。

  • 在代码中创建布局方式和创建组件
    // 设置布局的第二种方式:在代码中创建一个布局,加到Activity中
    // 创建一个线性布局
    LinearLayout linearLayout = new LinearLayout(this);
    // 设置线性布局的宽,高:根据内容自动调整
    linearLayout.setLayoutParams(new LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    // 添加TextView组件
    TextView tv = new TextView(this);
    // 设置组件TextView的内容
    tv.setText(“动态添加内容”);
    // 设置组件的高,宽
    tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT));
    // 将组件添加到布局中
    linearLayout.addView(tv);
    // 设置此Activity的布局方式
    this.setContentView(linearLayout);

  • Log打印不全

服务器返回的json数据量比较大,然后我想在logcat中完全输出服务器返回的Json格式的字符串事,发现logcat中返回的信息中明显少了后面一节,刚开始还以为程序有bug,调试了好半天才发现原来程序没有bug,而是LogCat中的每次的Msg输出是有上限的,坑的我好惨啊,查了资料才发现,.原来logcat在实现上对于message的内存分配大概是4k左右.所以超过的内容都直接被丢弃

  • 正确拿到子控件的宽高的做法

//监听全局布局
iv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() {
//布局改变后调用该方法
Log.d(“tag”, “OnGlobalLayout width=”+iv.getWidth());
//进行二次采样
Bitmap bitmap=BitmapUtils.getBitmap(MainActivity.this,R.mipmap.oom,iv.getWidth(),iv.getHeight());
//设置图片
iv.setImageResource(R.mipmap.oom);
//移除监听,为了防止布局多次调用
iv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}

  • 导第三方框架常见错误
    Error:(2, 0) Plugin with id‘com.github.dcendents.android-maven’ not found.
    解决办法
    找到project 的 build.gradle 添加如下代码
    classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3’
    classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0”

buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:2.0.0-alpha3’
classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3’
classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0”
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
.最后 try again 或者 sync now 就 OK

posted @ 2016-10-15 21:14  程序IT猿  阅读(119)  评论(0编辑  收藏  举报