大家好!今天大家分享的是Android通过okhttp发送请求返回数据。 

一、Okhttp

Okhttp是目前Android主流的网络请求框架之一。话不多说,我们直接来看Okhttp怎么使用

首先我们要在项目添加Okhttp依赖找到build.gradle文件

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.1.1'
}

完整build.gradle文件

dependencies {
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation files('libs\mysql-connector-java-5.1.0-bin.jar')
    implementation 'com.squareup.okhttp3:okhttp:4.1.1'
    implementation 'com.alibaba:fastjson:1.2.62'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

添加依赖是不行的,我们还需要项目添加网络权限找到AndroidManifest.xml文件

 <uses-permission android:name="android.permission.INTERNET"/&gt;

这样我们就完成了Okhttp的配置

二、发送请求

这里我是选择点击一个按钮发送请求。我们首先需要找到按钮然后写它的点击事件,把发送请求的代码写到点击事件里。要注意的是这里需要try catch一下,不然容易有异常。我们方便捕获异常

 houduan = findViewById(R.id.btn_houduan);//找到按钮
        houduan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(new Runnable() {//子线程
                    @Override
                    public void run() {
                        try {
                           OkHttpClient client = new OkHttpClient();//创建Okhttp实例
                           String url = "https://apis.tianapi.com/nba/index?key=2883d8175524da819017415676fdf911";//请求路径
                           Request request = new Request.Builder()
                                   .url(url)
                                   .get()
                                   .build();//get请求
                           Call call = client.newCall(request);
                           Response response = call.execute();//执行
                           String responseData = response.body().string();//接收数据
                           JSONArray array = new JSONArray(responseData);//将数据存到数组
                           for(int i = 0; i<array.length();i++){//循环打印
                               JSONObject obj = array.getJSONObject(i);
                               String title = obj.getString("title");
                               Log.d("title:",title);//打印
                           }
                        }catch (Exception e){
                            //Toast.makeText(MainActivity.this, "jj:"+e, Toast.LENGTH_SHORT).show();
                            Log.d("e",e.toString());
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "网络连接失败!", Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    }
                }).start();

这里我们需要代码放到线程里,因为这是网络请求,如果放到主线程里网络不好的话会导致整个应用都卡起来,而放到线程里不会影响主线程及其他线程运行速度

 如果相加参数需要一个RequestBody,将参数放到里面然后放到请求里面传递即可代码如下

                           RequestBody requestBody = requestBuild
                                   .add("key",key)
                                   .build();
                           Request request = new Request.Builder()
                                   .url(url)
                                   .post(key)
                                   .build();//post请求

 代码写好之后我们运行起来,点击按钮

 

 数据成功打印出来在控制台。我在这只是简单打印输出了一下,如果想将数据返到页面可以用Bundle。


总结

就是今天想要分享内容,只需要配置好项目写对代码就好,如果觉得有用的话记得留个赞!谢谢观看!
 

原文地址:https://blog.csdn.net/m0_66403070/article/details/130351632

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49801.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注