您的位置:首页 > 理论基础 > 计算机网络

Http网络请求库框架的使用

2016-01-14 15:01 429 查看
1.Volley和Async网络框架的特点

Http网络数据交互请求是极其重要并且使用很频繁的一个模块,也是最基本的网络编程所需要学习的。网络请求方式的效率和性能直接影响到APP的整体用户体验流畅性,所以学习并掌握一款好的Http请求框架对我们的网络开发非常重要。Http请求在移动网络编程中主要是Get和Post请求接口数据的使用。所以,在学习好基础的Http请求知识后,为了提升开发效率,选择学习使用一款好的Http网络请求框架变得非常的重要。
能使网络通信更快,更简单,更健壮
Get、Post网络请求及网络图像的高效率异步处理请求
可以对网络请求进行排序优先级管理
网络请求的缓存
多级别取消请求
和Activity生命周期的联动(Activity结束时同时取消所有网络请求)
2.Volley的用法

使用Volley可以简化一些网络通信的开发,当然Volley不适合大数据(large payloads )和流媒体的网络请求。例如上百兆的文件、视频下载。

Volley开源,可以进行定制修改也可以直接使用Jar包的形式。

Volley的Get和Post请求方式的使用

Volley的网络请求队列建立和取消队列请求

Volley有自己的请求队列管理机制,可以控制每个请求的建立与取消。非常方便和安全。这样也就可以做到随时控制某个请求在什么时候结束,Activity生命周期关联,防止无谓的请求。

Get和Post用于与服务器间请求和发送数据。

建立请求首先建立队列,将请求添加到请求队列里。
然后进行相应的Get和Post请求,请求结果在回调里获取解析。

3.Android-async-http的用法

Async-http是一款国外的开源框架,作者是loopj。是基于Apache HttpClient库的。可以方便快速高效的进行网络数据请求和发送,文件下载和上传。

特点:
清晰的网络请求回调
请求使用ThreadPool,限制并发资源使用情况
GET / POST基于参数构建使用(RequestParams),方便
Multipart 文件上传,大数据上传下载
自动智能请求重试,优化了质量不一的移动连接
内置响应解析成JSON,使用JsonHttpResponseHandler
持久化cookie存储,保存cookie到你的应用程序的SharedPreferences
二进制文件(图片等)的下载,使用BinaryHttpResponseHandler

Android-async-http的Get和Post请求方式的使用

Android-async-http回调逻辑的二次封装
建立请求首先建立请求客户端对象。
然后进行相应的Get和Post请求,请求结果在回调里获取解析。
Async-http的Get和Post请求可以基于参数化请求(RequestParams),可以清晰方便的将你的请求参数放到里面,然后进行Get和Post请求
Async-http有自己的默认的回调逻辑封装,例如请求成功,请求失败,重试请求等回调。
4.Java代码

package com.gst.user.application;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;

import java.util.HashMap;
import java.util.Map;

public class VolleyAndAsyncHttpActivity extends AppCompatActivity {
RequestQueue queue;
AsyncHttpClient client;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley_and_async_http);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});

queue= Volley.newRequestQueue(this);
client=new AsyncHttpClient();

}

public void volley_Get(View view){
String url="http://apis.juhe.cn/mobile/get?phone=13666666666&key=335adcc4e891ba4e4be6d7534fd54c5d";
StringRequest request=new StringRequest(Request.Method.GET,url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!",
Toast.LENGTH_LONG).show();
}
});
request.setTag("volley_get");
queue.add(request);

Toast.makeText(VolleyAndAsyncHttpActivity.this,"单击了volley_get",Toast.LENGTH_SHORT).show();

}

public void volley_Post(View view){
String url = "http://apis.juhe.cn/mobile/get?";
StringRequest request=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!",
Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map=new HashMap<>();
map.put("phone","18205272296");
map.put("key","335adcc4e891ba4e4be6d7534fd54c5d");
return map;
}
};
request.setTag("volley_post");
queue.add(request);
}

public void asyncHttp_get(View view){
String url = "http://apis.juhe.cn/mobile/get?phone=13666666666&key=335adcc4e891ba4e4be6d7534fd54c5d";
client.get(url, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String s) {
super.onSuccess(s);
Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
Toast.LENGTH_LONG).show();
}

@Override
public void onFailure(Throwable throwable, String s) {
super.onFailure(throwable, s);
Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!" + s,
Toast.LENGTH_LONG).show();
}
});
}

public void asyncHttp_post(View view){
String url="http://apis.juhe.cn/mobile/get?";
RequestParams params=new RequestParams();
params.put("phone","18205272296");
params.put("key", "335adcc4e891ba4e4be6d7534fd54c5d");
client.post(url,new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String s) {
super.onSuccess(s);
Toast.makeText(VolleyAndAsyncHttpActivity.this, s,
Toast.LENGTH_LONG).show();
}

@Override
public void onFailure(Throwable throwable, String s) {
super.onFailure(throwable, s);
Toast.makeText(VolleyAndAsyncHttpActivity.this, "请求失败!" + s,
Toast.LENGTH_LONG).show();
}
});

}

@Override
protected void onStop() {
queue.cancelAll("volley_post");
queue.cancelAll("volley_get");
super.onStop();
}

}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_volley_and_async_http"
tools:context="com.gst.user.application.VolleyAndAsyncHttpActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="volley_get"
android:id="@+id/button2"
android:onClick="volley_Get"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="volley_post"
android:id="@+id/button3"
android:onClick="volley_Post"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:layout_marginTop="34dp" />

<Button
android:layou
cea2
t_width="wrap_content"
android:layout_height="wrap_content"
android:text="asyncHttp_get"
android:onClick="asyncHttp_get"
android:id="@+id/button4"
android:layout_below="@+id/button3"
android:layout_alignLeft="@+id/button3"
android:layout_alignStart="@+id/button3"
android:layout_marginTop="46dp" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="asyncHttp_post"
android:onClick="asyncHttp_post"
android:id="@+id/button5"
android:layout_marginTop="52dp"
android:layout_below="@+id/button4"
android:layout_alignLeft="@+id/button4"
android:layout_alignStart="@+id/button4" />
</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: