Nohttp类似于volley的升级版,其使用步骤基本一致
Nohttp的特点:
1.多种请求方式并发调用,支持get,post,put等网络解析方式。
2.文件上传,文件下载,下载进度回调,错误回调,支持暂停继续下载,支持取消大文件上传,不会发生OOM,支持File,InputStream,ByteArray,Bitmap,实现NOhttp的Binary接口,理论上任何东西都可以传。
3.支持取消某个请求,取消指定多个请求,取消所有请求。
4.支持自定义Request,利用NOhttp泛型可以解析成你想要的任何数据格式(String,Json,JavaBeann,XML,Bitmap)。
AndroidStudio使用方式:
如果使用HttpURLConnection作为网络层:
compile 'com.yolanda.nohttp:nohttp:1.1.0'
如果要使用OkHttp作为网络层,请再依赖:
compile 'com.yanzhenjie.nohttp:okhttp:1.1.0'
2. 在清单文件下加入权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
3. 初始化(NoHttp初始化需要一个Context,最好在Application的onCreate()中初始化,需要在manifest.xml中注册Application)。
NoHttp.initialize(this);
4. 使用NOhttp进行网络请求
新建一个队列用来添加消息请求,可以并发多个消息请求,默认为3个
发送消息请求,并添加到队列
Nohttp的特点:
1.多种请求方式并发调用,支持get,post,put等网络解析方式。
2.文件上传,文件下载,下载进度回调,错误回调,支持暂停继续下载,支持取消大文件上传,不会发生OOM,支持File,InputStream,ByteArray,Bitmap,实现NOhttp的Binary接口,理论上任何东西都可以传。
3.支持取消某个请求,取消指定多个请求,取消所有请求。
4.支持自定义Request,利用NOhttp泛型可以解析成你想要的任何数据格式(String,Json,JavaBeann,XML,Bitmap)。
5.异步请求,拿到结果直接更新UI,支持同步请求。
Nohttp参考资料:
NOhttp官网 https://github.com/yanzhenjie/NoHttp
NOhttp使用的说明文档 http://doc.nohttp.net/162186
NOhttp的基本使用:http://blog.csdn.net/yanzhenjie1003/article/details/50679905
开发NOhttp作者空间:http://www.yanzhenjie.com
开发NOhttp作者的CSDN:http://blog.csdn.net/yanzhenjie1003
Nohttp的使用步骤:
1. 进行关联AndroidStudio使用方式:
如果使用HttpURLConnection作为网络层:
compile 'com.yolanda.nohttp:nohttp:1.1.0'
如果要使用OkHttp作为网络层,请再依赖:
compile 'com.yanzhenjie.nohttp:okhttp:1.1.0'
2. 在清单文件下加入权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
3. 初始化(NoHttp初始化需要一个Context,最好在Application的onCreate()中初始化,需要在manifest.xml中注册Application)。
NoHttp.initialize(this);
4. 使用NOhttp进行网络请求
新建一个队列用来添加消息请求,可以并发多个消息请求,默认为3个
发送消息请求,并添加到队列
设置结果回调监听,对请求结果进行统一处理
通过一个例子与上面的步骤相结合进行实际操作
效果图:
1.找到Studio中build.gradle文件,在dependencies下加入依赖(这里使用HttpURLConnection作为网络层)
compile 'com.yolanda.nohttp:nohttp:1.1.0'
2.在清单文件中加入权限
3.布局文件以及初始化
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btnGet" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Get方式获取网络数据" /> <Button android:id="@+id/btnPost" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Post方式获取网络数据" /> <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/txtShow" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </ScrollView> </LinearLayout>Nohttp在初始化时,最好在Application的onCreate()中初始化,新建一个类继承Application
public class MyApplication extends Application{ @Override public void onCreate() { //NoHttp默认初始化 NoHttp.initialize(this); super.onCreate(); } }注意:还要再清单文件注册Application
4. 使用NOhttp进行网络请求,MainActivity代码如下(点击事件中为Nohttp主要代码):
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnGet; private Button btnPost; private TextView txtShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnGet = (Button) findViewById(R.id.btnGet); btnPost = (Button) findViewById(R.id.btnPost); txtShow = (TextView) findViewById(R.id.txtShow); btnGet.setOnClickListener(this); btnPost.setOnClickListener(this); } /** * 根据点击事件,执行Nohttp的get方式 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnGet: //使用Nohttp进行网络访问的网址 String url = "http://www.baidu.com"; //1.创建一个队列 RequestQueue queue = NoHttp.newRequestQueue(); //2.创建消息请求,参数1 String字符串,传网址,参数2 指定请求的方式 //提示:请求的数据是什么类型,就调用对应的方法,主要是中间的单词不一样 Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET); //3利用队列去添加消息请求 参数1:请求的标识 参数2:消息请求对象 参数3:请求的回调监听 //请求可以并发,统一处理响应结果 queue.add(0, request, new OnResponseListener<String>() { //请求开始时,回调的方法,一般做进度条对话框的加载 @Override public void onStart(int what) { } //请求成功,回调的方法,代码直接运行到主线程 @Override public void onSucceed(int what, Response<String> response) { //获取的相应结果设置到TextView进行展示 String result = response.get(); txtShow.setText(result); } //网络请求失败的回调,代码直接运行到主线程 @Override public void onFailed(int what, Response<String> response) { } //网络请求成功,一般隐藏进度条对话框 @Override public void onFinish(int what) { } }); break; //根据点击事件,执行Nohttp的post方式 case R.id.btnPost:String url1 = "post请求需要访问服务器,这里写需要访问的服务器网址";//1.创建一个队列
RequestQueue queue1 = NoHttp.newRequestQueue();
//2.创建消息请求 参数1:String字符串,传网址 参数2:指定请求方式
Request<String> request1 = NoHttp.createStringRequest(url1, RequestMethod.POST);
//3.利用队列去添加消息请求
queue1.add(1, request1, new OnResponseListener<String>() {
@Override
public void onStart(int what) {
}
@Override
public void onSucceed(int what, Response<String> response) {
txtShow.setText(response.get());
}
@Override
public void onFailed(int what, Response<String> response) {
Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish(int what) {
}
});
break;
}
}
}