Android: okhttp3 的get和post

public class MainActivity extends AppCompatActivity {

    private static final String POST_URL = "https://api.github.com/markdown/raw";
    private static final MediaType MEDIA_TYPE_MARKDOWN
            = MediaType.parse("text/x-markdown; charset=utf-8");

    public static final String TARGET_URL = "https://raw.githubusercontent.com/square/okhttp/master/README.md";
    OkHttpClient mokHttpClient = new OkHttpClient();
    TextView textView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.tv_content);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.action, menu);
        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menuGet:
                get();
                break;
            case R.id.menuResponse:
                response();
                break;
            case R.id.menuPost:
                post();
                break;
        }
        return super.onOptionsItemSelected(item);
    }


    private void post() {

        MediaType mediaType = MediaType.parse(
                "text/x-markdown; charset=utf-8");
        RequestBody stringBody = RequestBody.create(
                "Hello world github/linguist#1 **cool**, and #1!"
                , mediaType);

        Request request = new Request
                .Builder()
                .url(POST_URL)
                .post(stringBody)
                .build();

//        方法已经过时
//        builder.post(RequestBody.create(MEDIA_TYPE_MARKDOWN
//        , "Hello world github/linguist#1 **cool**, and #1!"));
//        Request request = builder.build();

        Call call = mokHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    final String content = response.body().string();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(content);
                        }
                    });
                }
            }
        });

    }

    private void response() {

        Request.Builder builder = new Request.Builder();
        builder.url(TARGET_URL);
        Request request = builder.build();
        Call call = mokHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                int code = response.code();//获得响应码
                Headers headers = response.headers();//相当于MAP,有key和Value
                String content = response.body().string();//获得响应体,再把响应体转为字符串

                final StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append("code:" + code);
                stringBuilder.append("\nheaders:" + headers.toString());
                stringBuilder.append("\ncontent:" + content);

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(stringBuilder);
                    }
                });

            }
        });

    }


    private void get() {

        ExecutorService executor = Executors.newSingleThreadExecutor();//开一个线程池
        executor.submit(new Runnable() {
            @Override
            public void run() {


                Request.Builder builder = new Request.Builder();
                builder.url(TARGET_URL);
                Request request = builder.build();
                Call call = mokHttpClient.newCall(request);

                try {
                    //这是同步方法
                    //程序调用到这里会阻塞
                    Response response = call.execute();

                    //从response里面拿数据
                    if (response.isSuccessful()) {
                        final String content = response.body().string();

                        //到UI线程去更新
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                textView.setText(content);
                            }
                        });
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        executor.shutdown();//线程池关掉

    }
}

layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </ScrollView>


</LinearLayout>

xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuGet"
        android:title="Get" />

    <item
        android:id="@+id/menuResponse"
        android:title="Response" />

    <item
        android:id="@+id/menuPost"
        android:title="Post" />
</menu>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值