Volley
- Google 是Google 2013年的I/O大会上,发布的一个框架
- 是Android上的网络通信库。能使网络通信更快,更简单,更健壮
- 特别适合数据量不大,但是通信频繁的场景(带图片的列表)
相关API
- RequestQueue:请求队列,会自动执行队列中的请求
-
- Volley.newRequestQueue(context):创建一个请求队列
- addRequest(Request request):将请求添加到请求队列
- Request<T>:代表请求的接口
-
- StringRequest:获取字符串结果的请求
- JsonRequest:获取Json数据结果的请求
- ImageRequest:获取图片结果的请求
package com.jereh.learnbymyself.net;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
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.jereh.learnbymyself.R;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class NetActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net);
textView = (TextView) findViewById(R.id.txt);
queue = Volley.newRequestQueue(this);
textView.setMovementMethod(new ScrollingMovementMethod());
}
public void connGet(View view) {
final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中");
new Thread() {
@Override
public void run() {
String path = "http://192.168.155.1:8080/AndroidHttp?name=haoren";
// String path = "http://www.baidu.com";
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.connect();
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
InputStream is = connection.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
final String result = baos.toString();
baos.close();
is.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(result);
dialog.dismiss();
}
});
}
//断开连接
connection.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 1.创建请求队列
* 2.创建请求对象StringRequest
*
* @param view
*/
private RequestQueue queue;
public void volleyGet(View view) {
String path = "http://192.168.155.1:8080/AndroidHttp?name=haoren";
StringRequest request = new StringRequest(Request.Method.GET, path, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
textView.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
textView.setText(volleyError.toString());
}
});
queue.add(request);
}
public void volleyPost(View view) {
String path = "http://192.168.155.1:8080/AndroidHttp";
StringRequest stringRequest = new StringRequest(Request.Method.POST, path, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
textView.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("haoren", "+++" + volleyError + "+++");
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("name", "haoren");
return map;
}
};
queue.add(stringRequest);
}
}