ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安卓 原生okhttp使用get与post获取网络数据

2021-11-17 17:03:06  阅读:136  来源: 互联网

标签:String get url 安卓 private result okhttp post


网址

https://square.github.io/okhttp/

配置

依赖

在module的build.gradle中:

    implementation 'com.squareup.okhttp3:okhttp:3.14.7'
    implementation 'com.squareup.okio:okio:1.17.5'

AndroidManifest.xml

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

xml文件

<?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"
    android:orientation="vertical"
    tools:context=".test.TestOKHttpActivity">
    <Button
        android:id="@+id/btn_get_post"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="get和post" />
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="xx"
        android:textSize="15sp"/>
</LinearLayout>

java代码

public class TestOKHttpActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_get_post;
    private TextView tv_result;
    private OkHttpClient client = new OkHttpClient();
    //设置编码类型
    public static final MediaType JSON
            = MediaType.get("application/json; charset=utf-8");
    //get和post请求标识
    private static final int GET = 1;
    private static final int POST = 2;
    //传递消息
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            //区分传递的是get还是post消息
            switch (msg.what) {
                case GET://获取数据
                    tv_result.setText((String) msg.obj);
                    break;
                case POST:
                    tv_result.setText((String) msg.obj);
                    break;
            }
        }
    };

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

    private void init() {
        //使用原生的okhttp请求网络数据,get和post
        btn_get_post = findViewById(R.id.btn_get_post);
        tv_result = findViewById(R.id.tv_result);

     
        btn_get_post.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            //使用原生的okhttp请求网络数据,get和post
            case R.id.btn_get_post:
                //getDataFromGet();//开启子线程,获取get
                getDataFromPost();//使用post获取数据
                break;
       
        }
    }

    //从子线程中获取网络数据
    private void getDataFromGet() {
        String url = "http://47.108.249.115:8080/LuShuDao0.0.2-1.0-SNAPSHOT/UserInfo/loginUser";
        new Thread() {
            @Override
            public void run() {
                super.run();
                String result = null;
                try {
                    result = get(url);
                    Log.e("Test", result);
                    Message message = Message.obtain();
                    message.what = GET;
                    message.obj = result;
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();

    }

    /*
    okhttp必须在子线程执行
    get请求
    url:请求网址
     */
    private String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        try (Response response = client.newCall(request).execute()) {
            return response.body().string();
        }
    }


    //post请求,上传数据,在子线程中执行
    private String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        try (Response response = client.newCall(request).execute()) {
            return response.body().string();
        }
    }

    //从子线程中获取网络数据
    private void getDataFromPost() {
        String url = "http://47.108.249.115:8080/LuShuDao0.0.2-1.0-SNAPSHOT/UserInfo/loginUser";
        new Thread() {
            @Override
            public void run() {
                super.run();
                String result = null;
                try {
                    //json是上传数据
                    result = post(url, "");
                    Log.e("Test", result);
                    Message message = Message.obtain();
                    message.what = POST;
                    message.obj = result;
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();

    }
}

总结

原生okhttp比较麻烦,使用第三方库去封装使用

标签:String,get,url,安卓,private,result,okhttp,post
来源: https://blog.csdn.net/qq_45402917/article/details/121382242

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有