安卓开发-填坑之路

今天开始把遇到的坑记录在博客中,以后开发遇到了也就easy啦 ……

as常用的快捷键

自动生成getset,tostring:  通过快捷键Alt+Insert
ctrl+O 在本类中查找方法
ctrl+G 查看哪些类调用了本类或本类的方法
studio 设置ctrl+alt+down复制快捷键:
Alt+number 打开关闭底部面板
ctrl+1 变成成员变量
alt+shift+r 修改包名 类名
alt+shift+m 抽取代码为方法
Alt+enter  调出quick fixes availabe(类型转换等提示)。
.var生成对应的变量
fbc (findViewById)

1. 实体类使用Parcelable序列化可能遇到的问题 class not found when unmarshalling
实例化集合:

out.writeList(genre);

genre = new ArrayList<GoodsCountGenreBean>();
        in.readList(genre, ClassLoader.getSystemClassLoader());

在进行传递的时候可能会遇到这个问题
这里写图片描述
看起来是类找不到,其实是传递数据的时候出错了,解决方法将对象中的集合取出来再传递:

Intent intent = new Intent(getActivity(), ContralActivity.class);
        intent.putParcelableArrayListExtra("GoodsCountBean", mData.get(position - 1).getGoodsCountGenreBean());
        intent.putExtra("CODE", 7);
        startActivity(intent);

mData = getActivity().getIntent().getParcelableArrayListExtra("GoodsCountBean");

**2. Caused by: android.util.AndroidRuntimeException:
Calling startActivity() from outside of an Activity
context requires the FLAG_ACTIVITY_NEW_TASK flag.
Is this really what you want?**

错误原因:使用非activity类型的context启动activity没有设置标记位
解决方法:

Intent in = new Intent();
in.setClass(context, HomeActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//添加标记位
context.startActivity(in);

3.commit already called
错误原因:使用transaction管理fragment,进行多次提交的时候只实例化了一次transaction;
解决方法:每次提交之前都实例化transaction;

4.java.lang.IllegalArgumentException: parameter must be a descendant of this view
错误原因:发生这个错误主要是ListView或者其它ViewGroup等容器控件因为滑动而暂时移除子View,但却没有移除该子View上面的焦点Focus,所以在ListView滑动返回到原来的位置的时候没有恢复成原来的View,导致了该异常的产生;
解决方法:


protected class MyScrollListener implements OnScrollListener {
    @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){ 
//       do nothing 
         }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (SCROLL_STATE_TOUCH_SCROLL == scrollState) {
            View currentFocus = getCurrentFocus();
            if (currentFocus != null) {
                currentFocus.clearFocus();
            }
        }
    }
}}}

5.at com.google.gson.internal. Gson Types.resolve( Gson Types.java:381)
错误原因:gson版本不对
解决方法:将gson版本改为1.7.1

5. Didn’t find class “com.eland.basepay.sample.test” on path: DexPathList[[zip file “/data/app/com.eland.basepay-1/base.apk”],nativeLibraryDirectories=[/vendor/lib, /sys

错误原因:应用jar包没有在Order and Export中勾上
解决方法:
这里写图片描述

6.the connection to the virtual device
这个是genymotion有时候启动不了的问题
解决方法:
网络–右键(属性)–更改适配器设置–VirtualBox Host-Only Network–属性–双击:Internet 协议版本4(TCP/IPv4)–修改为自动获取IP和DNS 即可解决这个问题。
这里写图片描述

7.Error:(1, 1) 错误: 非法字符: ‘\ufeff’ Error:(1, 10) 错误: 需要class, interface或enum
错误原因:Eclipse可以智能的把UTF-8+BOM文件转为普通的UTF-8文件,Android Studio还没有这个功能,所以使用Android Studio编译UTF-8+BOM编码的文件时会出现” 非法字符: ‘\ufeff’ “之类的错误
解决方法:
可以手动将UTF-8+BOM编码的文件转为普通的UTF-8文件。
用notePad++ 打开Java文件
点击格式,编码换成无bom格式编码
这里写图片描述
8. ViewStub must have a valid layoutResource

错误原因:添加layout的时候使用了标签的用法
解决方法:
这里写图片描述
* 9. ViewStub must have a non-null ViewGroup viewParent*
错误原因:ViewStub 只能被inflate一次,使用时要注意
* 10. ScrollView嵌套ScrollView*
在内部ScrollView处理OnTouch事件

    innerSl.setOnTouchListener(new OnTouchListener() {

            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP)
                    innerSl.requestDisallowInterceptTouchEvent(false);
                else
                    innerSl.requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });

11、百度地图去掉定位蓝色圆点
注释方向的构造函数

//          // 构造定位数据
//          MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
//                  // 此处设置开发者获取到的方向信息,顺时针0-360
//                  .latitude(location.getLatitude()).longitude(location.getLongitude()).build();
//          mBaiduMap.setMyLocationData(locData);

12、Can’t create handler inside thread that has not called Looper.prepare()
错误原因:在子线程中更新ui
解决方法:加上轮询

new Thread(new Runnable() {  

                    @Override  
                    public void run() {  
                        // TODO Auto-generated method stub  
       Loop.prepare();
        //todo
        Loop.loop();                
                    }  

13、提交json数据

JSONArray json = new JSONArray();
JSONObject jo = new JSONObject();                
   jo.put("user_id", cId);
   jo.put("status", "0");
   jo.put("time", tv_endDate.getText().toString());
   json.put(jo);
提交:
parma.put("key",json);

14、通过fragment的setUserVisibleHint()弥补vieapager默认加载至少2页数据

package cn.irains.access_control_v2.common;
import android.support.v4.app.Fragment;
/**
 * Author: msdx (645079761@qq.com)
 * Time: 14-7-17 下午5:46
 */
public abstract class LazyFragment extends Fragment {
    protected boolean isVisible;
    /**
     * 在这里实现Fragment数据的缓加载.
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(getUserVisibleHint()) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
            onInvisible();
        }
    }
    protected void onVisible(){
        lazyLoad();
    }
    protected abstract void lazyLoad();
    protected void onInvisible(){}
}

15、INSTALL_FAILED_NO_MATCHING_ABIS 解决办法
错误原因:是由于使用了native libraries 。该native libraries 不支持当前的cpu的体系结构。
解决办法:安装Genymotion-ARM-Translation_v1.1到模拟器中,并重启模拟器;下载地址:http://download.csdn.net/my

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值