代码改变世界

使用Http协议访问网络

2017-07-17 15:21  烈'焰  阅读(404)  评论(0编辑  收藏  举报

1.设置一个布局用于显示得到的数据

首先要new Thread()并且在里面new Runable()方法。首先获取HttpURLConnection实例。通过Url设置UI地址,通过uri调用openConnction()方法并且赋值于我们获取的实例,通过实例设置get请求。它是以的形式返回所以我们要定义一个Buff流来读取它。并且定义一个动态数组StringBuilder用来存储我们读取的流,最后将数组里的数据转为字符串用控件调用setText()方法显示在界面上

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    TextView mresponseText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    mresponseText= (TextView) findViewById(R.id.text);
     Button send= (Button) findViewById(R.id.butn);
        send.setOnClickListener(this);
     
    }

    @Override
    public void onClick(View v) {
        if (v.getId()==R.id.butn){
            sendRequestUri();
        }
    }

    //发送url请求
    private void sendRequestUri() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connsent = null;
                BufferedReader reader = null;

                try {
                    URL uri = new URL("http://tuijian.hao123.com/");//设置uri
                    connsent = (HttpURLConnection) uri.openConnection();//打开所设定的uri
                    connsent.setRequestMethod("GET");//发送get请求
                  InputStream in= connsent.getInputStream();//获取返回的流
                    reader = new BufferedReader(new InputStreamReader(in));//利用buff读取返回的流
                    StringBuilder response = new StringBuilder();//将流转换为字符串
                    String line;
                    while ((line=reader.readLine())!=null){
                        response.append(line);
                    }
                    show(response.toString());

                } catch (Exception e) {
                    e.printStackTrace();
                }finally {
                    if (reader!=null){
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }if (connsent!=null){
                        connsent.disconnect();
                    }
                }
            }
        }).start();
    }
    public void show(final String respon){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mresponseText.setText(respon);
            }
        });

    }
}

 二。Okhttp方法

首先要添加一个依赖

   compile 'com.squareup.okhttp3:okhttp:3.4.1'

 创建一个OkHttppClient实例

new OkHttppClien();

如果想要发送请求要创建一个Request对象

new Request.Builder().uri("uri").build();

接下来用我们定义的实例的newCall()方法调用execute()方法,用来发送和得到返回数据的。ewCall()中的参数为我们发送的ui数据

最后将返回的数据转为字符串类型显示到控件上

private void sendRequestUriOkhttp() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
             OkHttpClient client= new OkHttpClient();
                //发送请求
               Request request= new Request.Builder().url("http://tuijian.hao123.com/").build();
                    Response response= client.newCall(request).execute();//execute()发送请求并且得到返回值
                   String responseData= response.body().toString();//将返回值转变为数组
                    show(responseData);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }