在安卓开发中,遇到的各种坑,现在找个时间把这些错误整理下来,分享给各位,希望你们不要重走我犯下的错误,同时,也对我这段时间的开发的错误,重新温习下。
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