最近Android开发中遇到的问题总结




1、 关于微信支付的问题,在微信支付只能调用一次,第二次调用时,提示错误码为“-1”,需要清除微信缓存才能第二次调用。由于微信支付文档并没有说明这一原因,经过反复试验,在确保代码都没有问题的情况下,日志消息为“ignore wechat app signature validation”时,要先检查微信开放平台里的配置文件,签名和包名是否正确。


2、 关于高德地图的onInitNaviSuccess只调用一次的问题。在路线规划的过程中,如果更换了地址,导致路线规划的方法只会走一次,官方文档也有提过:AMapNavi 对象是单例对象。所以如需多次进行路线规划,需要在再先将AMapNavi给destroy了,之后就可以正常调用了。
 最近Android开发中遇到的问题总结


3、 关于ViewPager和ConvenientBanner嵌套时滑动冲突的处理办法,如果ConvenientBanner设置了轮播时间和可以循环轮播的话,先取消设置轮播时间,并且关闭循环轮播,在ViewPager里嵌套的ConvenientBanner和其他Fragment就可以切换,解决冲突。


4、 关于环信聊天,在环信后台如果没有设置聊天昵称的话,在聊天列表会自动显示他的id,并没有昵称,所以在使用的过程中,必须设置环信用户的昵称。


5、 swipeRefreshLayout和listView下拉刷新冲突的问题,要先判断listview的item第一个是否可见,第一个item是否在最顶部,然后进行处理swipeRefreshLayout是否可以刷新,代码如下:
/**
 * 解决下拉刷新与listview冲突的问题
 * @param listView
 * @param swipeRefreshLayout
 */
public static void resolveSwipe*(final ExpandableListView listView, final SwipeRefreshLayout swipeRefreshLayout){


    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {


        }
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            boolean refresh = false;
            if (listView != null && listView.getChildCount() > 0 ){//listView不能为空
                boolean firstItemVisible = listView.getFirstVisiblePosition() == 0;//第一个item是否显示
                boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0;//第一个item是否在最
                refresh = firstItemVisible && topOfFirstItemVisible;
            } else {
                refresh = true;
            }
            swipeRefreshLayout.setEnabled(refresh);


        }
    });
}


6、 关于ScrollView里嵌套ListView,焦点会被ListView占据,导致进入界面后界面焦点会停留在ListView上,而没有从最顶部显示,在界面初始化时调用ScrollView.smoothScrollTo(0,0);解决ScrollView下嵌套ListView进页面不在顶部的问题。


7、 点击popupwindow的外部,要关闭popupwindow,必选要在代码中设置他的background,否则popupwindow并不会关闭;


8、 在使用BroadcastReceiver时,接收的地方,要先注册相应的广播,在界面销毁的时候要注销,调用unregisterReceiver方法;


9、 在使用框架里的图片裁剪时,保存图片的名称不能写死,最好加个流水号,确保图片名称的唯一性,否则,每次获取到的图片都是同一张。


10、 在解析字段时,如果字段的类型不确定的话,就用String接收,否则容易出错;


11、 如果你在 manifest 中把一个 activity 设置成 android:windowSoftInputMode="adjustResize",那么 ScrollView(或者其它可伸缩的 ViewGroups)会缩小,从而为软键盘腾出空间。但是,如果你在 activity 的主题中设置了 android:windowFullscreen="true",那么 ScrollView 不会缩小。这是因为该属性强制 ScrollView 全屏显示。然而在主题中设置 android:fitsSystemWindows="false" 也会导致 adjustResize 不起作用;