Android发送Okhttp请求并返回数据

大家好!今天给大家分享的是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"/>

这样我们就完成了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请求

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

扫描二维码关注公众号,回复: 16515430 查看本文章

 

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


总结

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

猜你喜欢

转载自blog.csdn.net/m0_66403070/article/details/130351632
今日推荐