最近回看到了android网络编程部分,在此将常用的几个网络类的基本使用方法做个总结:
结合一个demo来总结一下:
demo中有三个按钮,分别对应三种请求方式:(先上图)
第一种 httpurlconnection 第二种 okhttp
第三种 volley
具体的介绍啥的不再赘述,可自行检索
上代码
package com.example.wenhaibo.androidstudy_http;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.android.volley.RequestQueue;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity implements View .OnClickListener{
private Button button,button1,button2;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
//绑定id
button=findViewById( R.id.send );
button1=findViewById( R.id.okhttp );
button2=findViewById( R.id.volley );
textView=findViewById( R.id.te_text );
//点击事件
button.setOnClickListener( this );
button1.setOnClickListener( this );
button2.setOnClickListener( this );
}
@Override
public void onClick(View v) {
switch ( v.getId()){
case R.id.send:
httpRequest();
break;
case R.id.okhttp:
okhttpRequest();
break;
case R.id.volley:
volleyRequest();
break;
default:
break;
}
}
//volley 方式的网络请求
private void volleyRequest() {
new Thread( new Runnable() {
@Override
public void run() {
try {
//创建队列
RequestQueue requestQueue = Volley.newRequestQueue( MainActivity.this );
//创建StringRequest的请求 还有一种构造法法
// StringRequest stringRequest = new StringRequest( "https://www.baidu.com", new com.android.volley.Response.Listener<String>() {
// @Override
// public void onResponse(String response) {
// //显示的方法
// showResponse( response );
//
// }
// }, new com.android.volley.Response.ErrorListener() {
// @Override
// public void onErrorResponse(VolleyError error) {
//
// }
// } );
// //请求加入队列中
// requestQueue.add( stringRequest );
JsonObjectRequest jsonObjectRequest=new JsonObjectRequest( "http://v.juhe.cn/joke/content/text.php?key=你的key&page=1&pagesize=10", null, new com.android.volley.Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
showResponse( String.valueOf( response ) );
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
} );
requestQueue.add( jsonObjectRequest );
}catch (Exception e){
e.printStackTrace();
}
}
} ).start();
}
//okhttp的网络请求
private void okhttpRequest() {
new Thread( new Runnable() {
@Override
public void run() {
try {
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
.url( "http://haibowen.top" )
//post请求
// .post( requestBody )
.build();
//封装post的数据
// RequestBody requestBody=new FormBody.Builder()
// .add( )
// .add( )
// .build();
//执行请求
Response response=okHttpClient.newCall( request ).execute();
String responsedata=response.body().string();
//显示的方法
showResponse( responsedata );
} catch (IOException e) {
e.printStackTrace();
}
}
} ) .start();
}
//httpurlconnetion的网络请求
private void httpRequest() {
//开辟新线程
new Thread( new Runnable() {
@Override
public void run() {
HttpURLConnection connection =null;
BufferedReader reader=null;
try
{
URL url =new URL( "http://192.168.1.31:8888/Servlet1" );
connection = (HttpURLConnection) url.openConnection();
//请求方式的设置
connection.setRequestMethod( "GET" );
// connection.setRequestMethod( "POST" );
connection.setConnectTimeout( 8000);
connection.setReadTimeout(8000 );
InputStream inputStream=connection.getInputStream();
//post数据的封装
// DataOutputStream dataOutputStream= new DataOutputStream( connection.getOutputStream() );
// dataOutputStream.writeBytes( );
reader =new BufferedReader( new InputStreamReader( inputStream ) );
StringBuilder response=new StringBuilder( );
String line;
while((line=reader.readLine())!=null){
response.append( line );
}
//显示请求的数据
showResponse(response.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if(reader!=null){
try {
reader.close();
}catch (IOException e){
e.printStackTrace();
}
}
}if(connection!=null){
connection.disconnect();
}
}
} ).start();
}
//切换线程到主线程进行ui的更新
private void showResponse(final String response) {
runOnUiThread( new Runnable() {
@Override
public void run() {
int i=1;
textView.setText( response);
}
} );
}
}
demo下载地址:
https://github.com/haibowen/AndroidStudyTest/tree/master/androidstudy_http