1、问题描述:
在存在多屏数据的时候,频繁滑动ListView会出现部分item黑屏的现象?
问题原因:
ListView的显示Adapter中的Item布局过于复杂,频繁滑动ListView时Android底层渲染不及时导致。
问题解决:
在AndroidMainnifest.xml中设置硬件加速,加速对界面渲染即可。(android:hardwareAccelerated=”true”)
2、问题描述:
webView在调用removeAllViews()的时候出现空指针异常:
java.lang.NullPointerException
android.webkit.WebViewClassic.sendViewSizeZoom(WebViewClassic.java:3573)
问题原因:
在AndroidMainifest.xml中的WebView的Activity设置了硬件加速。
问题解决:
针对当前Activity取消硬件加速即可。(android:hardwareAccelerated=”false”)
3、问题描述:
在更新新版本后,数据库报没有列名的异常?
问题原因:
用户升级版本夸大过大,而在判断的时候在onUpgrade方法中是根据oldVersion、newVersion来比较判断的,例如:用户从版本号为7直接升级到了版本号为9,此时为版本号为8的版本的字段则没有添加到数据库中。
问题解决:
在onUpgrade方法中对全部字段进行判断,判断方法为如果在数据库中不存在字段,则创建字段,例如:
// 直接在zg_message表中增加my_id列
private String ADD_MY_ID_CLUMN_TO_ZG_MESSAGE = "ALTER TABLE zg_message ADD my_id integer";
if (!DBHelperMethod.checkColumnExist(db,
PandaDBConst.ZG_MESSAGE, "my_id")) {
db.execSQL(ADD_MY_ID_CLUMN_TO_ZG_MESSAGE);
}
/** * 检查某表列是否存在 * * @param db * @param tableName * 表名 * @param columnName * 列名 * @return */
public static synchronized boolean checkColumnExist(SQLiteDatabase db,
String tableName, String columnName) {
boolean result = false;
Cursor cursor = null;
try {
// 查询一行
cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 0",
null);
result = cursor != null && cursor.getColumnIndex(columnName) != -1;
} catch (Exception e) {
Log.e(TAG, "checkColumnExists1..." + e.getMessage());
} finally {
if (null != cursor && !cursor.isClosed()) {
cursor.close();
}
}
return result;
}
注意:我们再onCreate中创建表的时候也要判断表是否存在,然后再创建,例如:
// 频道动态表
db.execSQL("create table IF NOT EXISTS channel_dynamic(_id integer primary key,channelids varchar,content varchar)");
4、问题描述:
新闻类数据缓存有什么方案?
问题解决:
①当第一次进入界面首先读取缓存中的新闻数据(db或者sp中的数据),如果不存在则显示加载界面,如果存在则显示具体新闻。
②在显示的同时请求服务器获取最新的第一页数据,返回结果后然后更新界面,同时保存新闻数据到缓存中。
③当用户下拉刷新的是传入一个page字段,然后请求服务器,获取下一页的数据,page为你想要获取的数据的页数。
这样做如果有缓存数据,则用户每次进来都能看到数据的。
5、问题描述:
广告缓存有什么方案?
问题解决:
每次进入需要显示广告的界面,首先去缓存图片,如果图片缓存成功并且当前Activity没有销毁,则显示广告,反之不显示广告。
6、问题描述:
为什么从服务器上获取的图片已变形?
问题原因:
因为在xml中设置的是图片的background,因该设置图片的src(在代码中设置方法:setImageResouce(Bitmap bmp)),然后再设置图片的ScaleType为CenterCrop。
问题解决:
xml设置:android:scaleType=”centerCrop”;
代码设置:iv.setScaleType(ScaleType.CENTER_CROP);
7、问题描述:
耗时请求后(AsyncTask)更新界面异常:is your activity running?
问题原因:
因为Activity已经销毁,但是没有取消AsyncTask,当异步执行完毕后,更新界面发现界面以及销毁,如果在这个时候弹出Dialog则会出现这个错误。
问题解决:
在弹出Dialog前面判断:
if(mContext != null && !((Activity)mContext).isFinishing()){
MyAlertDialog();
.........
}
8、问题描述:
Android中EditText获取焦点键盘弹出来后将整个布局都顶了上去,怎么设置只顶EditText,不顶整个布局?
问题解决:
把不需要顶上去的布局最外层包裹一层ScrollView。
9、问题描述:
Android属性动画不重复执行问题?
问题解决:
ObjectAnimator oa ;
… …
oa.setRepeatCount(ObjectAnimator.INFINITE);
10、问题描述:
Android中点击Back键盘退出APP报错:IllegalStateException: Can not perform this action after onSaveInstanceState。(从日志中可以看出是在fragment.commit()方法中出的错)。
问题原因:
在使用commit方法是在Activity的onSaveInstanceState()之后调用的,这样会出错,因为onSaveInstanceState方法是在该Activity即将被销毁前调用,来保存Activity数据的,如果在保存玩状态后再给它添加Fragment就会出错。
问题解决:
把commit()方法替换成commitAllowingStateLoss()就行了,其效果是一样的。
11、问题描述:
通过ImageSpan设置ImageView大小失效问题(通过TextView高度设置图片高度,从而使得图片随着文字大小改变而改变).
问题原因:
在构造ImageSpan时候使用了默认的一个参数的构造方法造成的。(使用的是默认mTargetDensity密度,所以我们即使设置了大小但是还是不管用的)
问题解决:
使用ImageSpan带两个参数(带有Context)的构造方法即可。
12、问题描述:
在Android中如何设置TextView上下文字滚动?
问题解决:
布局中和代码中分别设置相应
①布局属性设置:
android:scrollbarFadeDuration="5000"
android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical"
android:singleLine="false"
例如:
<TextView android:id="@+id/id_msg_tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxHeight="100dip" android:minHeight="40dip" android:layout_margin="10dp" android:background="#FFF" android:padding="10dp" android:scrollbarFadeDuration="5000" android:scrollbarStyle="outsideOverlay" android:scrollbars="vertical" android:singleLine="false" android:textColor="#000"/>
②代码属性设置:
TextView id_msg_tv = (TextView) contentView.findViewById(R.id.id_msg_tv);
id_msg_tv.setMovementMethod(ScrollingMovementMethod.getInstance());
12、问题描述:
在Android中Activity背景默认为啥是黑色的?
问题原因:
在代码中或者Androidmainfest.xml中设置了主题样式为黑色的导致的。
问题解决:
二、在java文件里设置:
LinearLayout myLayout = () findViewById(R.id.linearLayout1);
myLayout.setBackgroundColor(Color.WHITE);
三、在AndroidManifest.xml里利用android:theme来设置,这个命令还是很强大的,如下所示:
theme的设置 可以设置为系统自带的格式,也可以自定义格式。
A: 系统自带格式
@android:style/Theme.Black //背景黑色-有标题-非全屏
@android:style/Theme.Black.NoTitleBar //背景黑色-无标题-非全屏
@android:style/Theme.Black.NoTitleBar.Fullscreen //背景黑色-无标题-全屏显示
@android:style/Theme.Dialog //对话框显示
@android:style/Theme.InputMethod
@android:style/Theme.Light //背景白色-有标题-非全屏
@android:style/Theme.Light.NoTitleBar //背景白色-无标题-非全屏
@android:style/Theme.Light.NoTitleBar.Fullscreen //背景白色-无标题-全屏显示
@android:style/Theme.Light.Panel
@android:style/Theme.Light.WallpaperSettings //背景透明
@android:style/Theme.NoDisplay
@android:style/Theme.Translucent.NoTitleBar.Fullscreen //半透明、无标题栏、全屏
@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen
可以在单个Activity里设置,也可以在applicaiton里全局设置。比如:
<activity android:screenOrientation="portrait" android:name=".ui.RegisterActivity" android:theme="@android:style/Theme.NoTitleBar"></activity>
13、问题描述:
ava.util.ConcurrentModificationException
java.util.ArrayList ArrayListIterator.next(ArrayList.java:573)com.diipo.traffic.punish.BindDrivingLicenceActivity 5.onClick(BindDrivingLicenceActivity.java:319)
问题原因:
对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常
for(CarInfo info : phoneSelectList){
if(!info.getCar_phone().equals(driver_phone)){
CarInfo ifo = new CarInfo();
ifo.setCar_phone(driver_phone);
phoneSelectList.add(ifo);
}
}
问题解决:
ArrayList<CarInfo> phoneSelectListBack = new ArrayList<CarInfo>();
for(CarInfo info : phoneSelectList){
if(!info.getCar_phone().equals(driver_phone)){
CarInfo ifo = new CarInfo();
ifo.setCar_phone(driver_phone);
//phoneSelectList.add(ifo);
phoneSelectList.add(infoBack);
}
}
for(CarInfo infoBack : phoneSelectListBack){
phoneSelectList.add(infoBack);
}