Android基础知识网络篇HttpUrlConnection Okhttp Volley的基本使用方法

最近回看到了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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值