使用HTTP协议访问网络

通过URL和HttpURLConnection发送网络协议获取内容,在通过InputStream和BufferedReader读取每一行内容,网络请求不能在主线程中发送,所以需要开启一个子线程来发送网络命令。然而在子线程中也不能访问UI内容,所以又需要回到主线程中显示内容。

@Override
protected void onCreate(Bundle savedInstanceState) {

    Button button13 = (Button)findViewById(R.id.button13);
    button13.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    HttpURLConnection connection = null;
                    BufferedReader reader = null;
                    try{
                        URL url = new URL("http://www.chicai.group");
                        connection = (HttpURLConnection)url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);
                        connection.connect();
                        int responseCode = connection.getResponseCode();
                        if(responseCode != HttpURLConnection.HTTP_OK) return;
                        InputStream in = connection.getInputStream();
                        reader = new BufferedReader(new InputStreamReader(in));
                        String line;
                        StringBuilder response = new StringBuilder();
                        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();
        }
    });
}

private void ShowResponse(final String str)
{
    runOnUiThread(new Runnable() {//异步消息处理机制的接口封装
        @Override
        public void run() {
            Toast.makeText(Main2Activity.this,str,Toast.LENGTH_LONG).show();
        }
    });
}

首页 我的博客
粤ICP备17103704号