Android如何使用OKHttp
程序员文章站
2024-03-25 11:33:16
...
首先要在build.gradle里面写入
// 添加OKHttp支持
implementation("com.squareup.okhttp3:okhttp:4.3.1")
下面是代码
下面是activity的java代码
package com.example.okhttpdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Main2Activity extends AppCompatActivity {
//需要寻找的网页,可以复制下来去看一下
//可以去 http://www.bejson.com/ 这个网页把json格式化
String getTodayGank = "http://gank.io/api/today";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//做一个按钮的点击事件
Button btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//OKHttp一定要用另一个线程,如果用主线程可能会线程堵塞报错
new Thread(new Runnable() {
@Override
public void run() {
//实例化 里面可能会出现异常,需要try catch
OkHttpClient client = new OkHttpClient();
//建立一个Request 通过Builder方法.Url里面填的就是json网址.build创建
Request request = new Request.Builder().url(getTodayGank).build();
try {
//Response是okhttp实例化,并且调用Request。执行后返回的结果
Response response = client.newCall(request).execute();
String s = response.body().string();//获取到的json数据
JSONObject jsonObject = new JSONObject(s);//转成json
JSONObject result = jsonObject.getJSONObject("results");//获取到名字为results的数据
JSONArray android = result.getJSONArray("Android");//在获取到results下面的Android的数据(Android有很多数据,以数组方式存放,所以用JsonArray)
for (int i=0;i<android.length();i++){
//日志输出
//获取jsonArray里面的数据需要用.getJSONObject(i),i为下标,下面名叫desc的数据,getString变成String格式进行输出
Log.i("TodayGank",android.getJSONObject(i).getString("desc").toString());
Toast.makeText(Main2Activity.this, "请求成功", Toast.LENGTH_SHORT).show();
}
} catch (IOException | JSONException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}
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"
tools:context=".Main2Activity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="99dp"
tools:layout_editor_absoluteY="221dp" />
</LinearLayout>
运行后点击按钮
查看的时候,打开日志猫
进行一下筛选,否则不容易看到log
大家也可以先看一下网站的内容,
需要寻找的网页
http://gank.io/api/today
可以去 http://www.bejson.com/ 这个网页把json格式化
上一篇: Django 报错:‘AttributeError: ‘str‘ object has no attribute ‘decode‘‘
下一篇: Django2.2报错::AttributeError: ''str'' object has no attribute ''decode''
推荐阅读
-
Android如何使用OKHttp
-
Android 一个改善的okHttp封装库
-
如何在Android studio 上引用自己的github module
-
Aspose.Words for .NET如何替换或修改超链接 博客分类: 文档管理,控件,使用教程 Aspose.Words超链接
-
Aspose.Words使用教程之如何写入纯文本(TXT)文件 博客分类: 文档管理,控件,使用教程 Aspose.Words使用教程
-
Aspose.Words使用教程之如何使用ChartDataLabel 博客分类: 文档管理,控件,使用教程 Aspose.Words使用教程ChartDataLabel
-
ActiveReports如何使用MySQL数据库 博客分类: ActiveReports,MySQL ActiveReportsMySQL
-
Aspose.Words使用教程之如何使用ChartDataLabel 博客分类: 文档管理,控件,使用教程 Aspose.Words使用教程ChartDataLabel
-
Aspose.Words如何重命名合并字段 博客分类: 文档管理,控件,使用教程 Aspose.Words使用教程重命名
-
ActiveReports如何使用MySQL数据库 博客分类: ActiveReports,MySQL ActiveReportsMySQL