zoukankan      html  css  js  c++  java
  • 学习进度条71

    第一步,需要创建一个OkHttpClient的实例,如下所示:

    OkHttpClient client = new OkHttpClient(); // 创建一个实例

    第二步,如果你想要发起一条HTTP请求,就需要创建一个Request对象:

    //发起一条HTTP请求

    Request request = new Request.Builder().build();

    当然,上述代码只是创建了一个空的Request对象,并没有什么实际的作用。我们可以在最终的build()方法之前连缀很多其他方法来丰富这个Request对象。比如,可以通过url()方法来设置目标的网络地址,如下:

    Request request = new Request.Builder()

            .url("http://www.baidu.com")

            .build();

    第三步,调用OkHttpClient的newCall()方法来创建一个call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据:

    Response response = client.newCall(request).execute();

    其中,Response对象就是服务器返回的数据了,我们可以使用如下写法来得到返回的具体内容:

    String responseData = response.body().string();

    如果是发起一条POST,我们需要先构建出一个Request Body对象来存放待提交的 参数,如下所示:

    RequestBody requestBody = new FormBody.Builder()

            .add("username","admin")

            .add("password","123456")

            .build();

    然后在Request.Builder中调用一下post()方法,并将RequestBody对象传入:

    Request request = new Request.Builder()

            .url("http://baidu.com")

            .post(requestBody)

            .build();

    接下来的操作就跟GET请求一样了,调用execute()方法来发送请求并获取服务器返回的数据即可。

    接下来用一个完整的实例来演示上面的做法:

    package com.example.webviewapplication;

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;

    import android.view.View;

    import android.webkit.WebView;

    import android.webkit.WebViewClient;

    import android.widget.Button;

    import android.widget.TextView;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.net.HttpURLConnection;

    import java.net.MalformedURLException;

    import java.net.ProtocolException;

    import java.net.URL;

    import okhttp3.FormBody;

    import okhttp3.OkHttpClient;

    import okhttp3.Request;

    import okhttp3.RequestBody;

    import okhttp3.Response;

    public class MainActivity extends AppCompatActivity {

       private Button send,upload;

       private TextView txt;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            send = findViewById(R.id.send_request);

            txt = findViewById(R.id.response_txt);

            upload = findViewById(R.id.upload);

            send.setOnClickListener(new View.OnClickListener() {

                @Override

                public void onClick(View v) {

                    sendRequestWithOkHttp();

                }

            });

        }

        private void sendRequestWithOkHttp() {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    OkHttpClient client = new OkHttpClient();

                    Request request = new Request.Builder()

                            .url("http://www.baidu.com")

                            .build();

                    try {

                        Response response = client.newCall(request).execute();

                        String responseData = response.body().string();

                        showRequest(responseData);

                    } catch (IOException e) {

                        e.printStackTrace();

                    }

                }

            }).start();

        }

        private void showRequest(final String responseData) {

            runOnUiThread(new Runnable() {

                @Override

                public void run() {

                    txt.setText(responseData);

                }

            });

        }

    }

    这里很重要的知识点:

    网络请求一定要用new Thread()开线程

    在UI界面上显示,一定要用runOnUiThread()

  • 相关阅读:
    Enum, Generic and Templates
    Writing A Threadpool in Rust
    A First Look at Rust Language
    Closures in OOC
    Complexity Behind Closure
    Introduction to OOC Programming Language
    OOC,泛型,糟糕的设计。
    Enlightenment笔记
    Machine Learning/Random Projection
    Machine Learning/Introducing Logistic Function
  • 原文地址:https://www.cnblogs.com/hhw12345/p/14910643.html
Copyright © 2011-2022 走看看