项目开发中遇到的坑

来源:互联网 发布:mysql python 安装 编辑:程序博客网 时间:2024/05/24 04:57

1.activity不显示布局:
粗心的使用了有2个参数的oncreate重构方法:

@Override    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);        setContentView(R.layout.activity_a);    }

2.listview使用的时候,发生类型转换的问题:
` holder = (ViewHolder) convertView.getTag();
具体报错信息:

java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to *******************Adapter$ViewHolder
查了一下发现是这里写错了:

convertView.setTag(convertView);

正确的写法应该是:

convertView.setTag(holder);

3.activity中一部分是fragment,fragment中有listview的情况
发现使用listview可以显示数据,但是使用pulltorefreshListview却没有出现数据.
经查是scrollview和listview冲突了,我是用的是将其他view作为头部加到listview中.

4.操作fragment的UI的时候,一定要在OnCreateView之后进行.特别是网络访问部分.

5.PullToRefreshListView一直在刷新状态
在网络回调中使用的时候会出现,原因是调用方法太快了,加一个延迟就可以了:

lv.postDelayed(new Runnable() {            @Override            public void run() {                lv.onRefreshComplete();            }        }, 1000);

6.Parcelable encountered IOException writing serializable object
json对象进行序列化的时候,要注意内部类同样也要实现serializable 接口.
7.Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag:
解决方法:

在前面加上intent.addFlags(FLAG_ACTIVITY_NEW_TASK)或者使用Activity.startActivity(intent)
activity继承了context重载了startActivity方法,如果使用acitvity中的startActivity,不会有任何限制。

而如果直接使用context的startActivity则会报上面的错误,根据错误提示信息,可以得知,如果要使用这种方式需要打开新的TASK。

8.图片下载到本地的时候发现是黑色的背景,如下图:
这里写图片描述
当调用

bitmap.compress(CompressFormat.JPEG, 100, fos);

保存为图片时发现图片背景为黑色,
解决方法为设置保存的格式为PNG就可以了:

bitmap.compress(CompressFormat.PNG, 100, fos);

9.debug包时没有问题.release包时抓取不到数据
我的情况就是在网络访问的时候,接口可以走通,也可以打印出json,但是系列化的时候出错了,无法转换为设置好的model,导致在回调中返回的是一个null,所以回调成功后使用的就是null,导致奔溃,如果做了非空判断的话就会没有数据,显示空白页面.
问题原因:在debug包的时候,系列化的对象字段没有暴露和系列化名字,但是也是可以序列化出对象的;
处理方法:没有暴露字段和系列化名字,这个时候在release的情况下就报错了,不知道为什么…
其实很简单,只需要加上序列化的字段的暴露和系列化的annotation就可以了,如下:

        private String pageTitle;        private String pageUrl;        private String pageIconUrl;

要改成:

        @SerializedName("page_title")        @Expose        private String pageTitle;        @SerializedName("page_url")        @Expose        private String pageUrl;        @SerializedName("page_icon_url")        @Expose        private String pageIconUrl;
1 0