HttpURLConnection

Posted DaLiangChen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpURLConnection相关的知识,希望对你有一定的参考价值。

HttpURLConnection 基本用法

package com.daliang.demo_http1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Debug;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new  Thread(){
            @Override
            public void run() {
                HelloHttp();
            }
        }.start();
    }

    public void HelloHttp()  {

        BufferedReader reader=null;
        HttpURLConnection conn=null;

        try {

            URL url =new URL("http://www.baidu.com");
            conn =(HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.connect();//发起连接
            int code=conn.getResponseCode();//200表示连接成功
            if (code==200)
            {
                InputStream inputStream=conn.getInputStream();
                reader=new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder result=new StringBuilder();
                String line;
                while ((line=reader.readLine())!=null)
                {
                    result.append(line);
                }
                System.out.println("连接网络成功!");
                System.out.println(result.toString());
            }
            else
            {
                System.out.println("连接网络失败!");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        finally {

            if (conn != null) conn.disconnect();
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

需要授予网络权限

<uses-permission android:name="android.permission.INTERNET"/>

从Android4.0开始强制禁止主线程访问网络。

new Thread(){
    public void run() {
        helloHttp();
    }
}.start();

Handler

在Android当中非主线程(UI线程,默认线程,main线程,原始线程)禁止修改UI内容, 所有对于UI的操作全都通过主线程来进行。

在主线程中编写handler对象

Handler handler = new Handler(){
    @Override
    public void handleMessage(@NonNull Message msg) {
        String text = (String) msg.obj;
        textView.setText(text);
} };

在需要更新UI的地方给handler发送消息

Message msg = new Message();
msg.obj=result.toString();
handler.sendMessage(msg);

 

以上是关于HttpURLConnection的主要内容,如果未能解决你的问题,请参考以下文章

HttpURLConnection 学习笔记 - 百度内容审核-图像

HttpURLConnection 学习笔记 - 百度内容审核-图像

HttpURLConnection 超时设置

HttpURLConnection.getInputStream 很慢

奇怪的问题---代码可以直接运行 Java的HTTPURLConnection如何取得要下载文件的长度

HttpURLConnection超时设置