[置顶] 关于网络请求的学习理解


不明白的地方:


1、我断网之前,个人中心什么都没有,连上网之后,什么也没有懂,就可以自动的连接上去了;
————还是上一次的网络么?——但是我在网络请求前面加判断了啊,没网应该是直接将代码执行过去的啊?



ListView位置的设置



listAdapter = new DirectionAttListAdapter(mDataAll,DirectionMangerActivity.this);
listAdapter.notifyDataSetChanged();
check_list.setAdapter(listAdapter);
check_list.setSelection(selectId); //关键放在适配之后


mListView.smoothScrollToPosition(0);//移动到首部
mListView.smoothScrollToPosition(listView.getCount() - 1);//移动到尾部



/**
* listView 如果不优化,会出现的问题:
* 1- 会次调用getView方法,都会创建 新的对象,这样会造成内存的浪费,甚至溢出,,OOM 异常( out of memary ) 
* 2- 如果getView 方法 执行时间,超过100毫秒,会造成 界面卡顿 ,降低用户体验。
*
* 优化的目标:
* 1- 最主要的目标就是让getView 方法 ,尽可能快的执行完,提高用户体验。
* 2- 减少创建对象,防止内存溢出。
*/

/*
* 第二步优化,使用ViewHolder 
* 的目标是减少,findViewById的操作。
* 第一次获得view对象时,找到view中子view,并打包,设置给vh,将vh通过setTag 背在view 的身上,
* 以后,只要能获得view,就可以通过getTag 获得背包,vh,然后,通过,vh中的变量来引用view 中的子View 从而减少了
* findViewById 这个方法的执行
*/


数据的传递

intent.putExtra("uid", int类型);
getIntExtra(name, defaultValue);  也是可以传递数字的,defaultValue是默认字段;

还有一种是通过Bundle,这两者有什么区别呢?


方法一: 
如果单纯的传递List<String> 或者List<Integer>的话 就可以直接使用 

Java代码 
intent.putStringArrayListExtra(name, value)  
intent.putIntegerArrayListExtra(name, value)  


http://www.cnblogs.com/lee0oo0/archive/2012/09/24/2699805.html


json数据的解析

从网络得到json解析后,怎么把数据绑定到listview?

其实,就是在网络请求内部设置:

adapter = new MyAdapter();
listview.setAdapter(adapter);

因为网络请求是异步操作,如果不在里面设置adapter的话,adapter的数据源就是一个null,会报空指针错误;

// data没有数据的时候,也会报错的===》下标越界的错误

ToolUtils.i("sectionSummaryListBean.data==========" + sectionSummaryListBean.data.get(0).toString());  


百度搜索:new Gson().toJson(new User("zhy", "123")  ——Okhttp---Post String
Gson可以将Java对象转换成JSON,也可能将JSON转换成Java对象。
 Gson里最重要的对象有2个Gson 和 GsonBuilder
 Gson有2个最基本的方法
1) toJson() – 转换java 对象到JSON
2) fromJson() – 转换JSON到java对象



关于xUtils的使用(不使用)

xUtils在android5.0上报错IOException: stack size 1036kb,在模拟器上面没有问题,但是部署在真机上面就报错,

但是在我的Nexus5上不能正常运行,经过查找资料发现问题所在:
是xUtils在android5.0上有bug ,更换最新的jar包就可以了。——还是有一些兼容行的问题
GitHub:https://github.com/wyouflf/xUtils



OkHttp的学习和使用

Android 一个改善的okHttp封装库  http://blog.csdn.net/lmj623565791/article/details/49734867/#reply
直接使用高手封装好的方法,直接使用就可以了;


加载网络图片

picasso的使用简单明了,一行代码直接就可以实现;http://blog.csdn.net/qq_30498273/article/details/51281856

网络框架的话,我准备使用OkHttp,问题是图片的加载我需要额外专门找一个框架么?感觉图片的处理有点麻烦了、

volleyNetworkImageView

哦,直接通过url加载图片,就不需要在考虑其他方便了么?

里面的三级缓存他都已经做好了

或者用其他第三方的图片加载框架都可以

universal-image-Loader,picasso等也可以



检测网络是否可用

/**
* 检测网络是否可用
* 需要的是两个权限,而不仅仅是一个
*     <uses-permission android:name="android.permission.INTERNET"/>
*     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
* @param context
* @return
*/

public static boolean isNetWorkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable() && mNetworkInfo.isConnected();
}
}


return false;

}

你可能感兴趣的:([置顶] 关于网络请求的学习理解)