文章分类

相关文章

Android 中发送 HTTP 请求

分类:Android     发布:2019-12-02     来源:本站     浏览:81 次
方法1:HttpURLConnection
布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/send_request"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="发送请求"
            />

        <!--带滚动条的视图-->
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <!--响应数据-->
            <TextView
                android:id="@+id/response_data"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                />

        </ScrollView>


    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

后置代码:

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.send_request).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                send();
            }
        });

        textView = (TextView) findViewById(R.id.response_data);
    }

    private void send() {
        //开启线程,发送请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                BufferedReader reader = null;
                try {
                    URL url = new URL("http://www.163.com");
                    connection = (HttpURLConnection) url.openConnection();
                    //设置请求方法
                    connection.setRequestMethod("GET");
                    //设置连接超时时间(毫秒)
                    connection.setConnectTimeout(5000);
                    //设置读取超时时间(毫秒)
                    connection.setReadTimeout(5000);

                    //返回输入流
                    InputStream in = connection.getInputStream();

                    //读取输入流
                    reader = new BufferedReader(new InputStreamReader(in));
                    StringBuilder result = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        result.append(line);
                    }
                    show(result.toString());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (ProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (reader != null) {
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (connection != null) {//关闭连接
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }

    /**
     * 展示
     *
     * @param result
     */
    private void show(final String result) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(result);
            }
        });
    }
}

因为在 Android 中不允许在子线程中执行 UI 操作,所以我们通过 runOnUiThread 方法,切换为主线程,然后再更新 UI 元素。

最后记得声明网络权限哦:

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

方法2: OKHttp
OKHttp 是一个处理网络请求的开源项目,目前是 Android 最火热的轻量级框架,由移动支付 Square 公司贡献(该公司还贡献了Picasso)。希望替代 HttpUrlConnection 和 Apache HttpClient。
首先引入 OKHttp 库依赖:
在项目build.gradle(Module:app)文件中加入:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    compile "com.squareup.okhttp3:okhttp:3.10.0"
}
然后点击 Android Studio 右上角的 Sync Now,把库真正加载进来。
修改请求方法:
/**
 * 发送请求(使用 OKHttp)
 */
private void sendByOKHttp() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url("http://www.163.com").build();
            try {
                Response response = client.newCall(request).execute();//发送请求
                String result = response.body().string();
                Log.d(TAG, "result: " + result);
                show(result);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
}
调试运行程序即可。


如果觉得文章对您有帮助,您可以对我进行打赏 ¥1.46 元(金额随机^_^,每次刷新金额不同)。

请使用支付宝扫码支付

留言评论

*称  呼:
*联系方式: 方便与您取得联系,推荐使用邮箱。
*内  容:

已有评论

暂无数据

上一篇:Android Studio 调试快捷键

下一篇:Android Fragment 中使用 WebView