社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
调用网络接口API并处理返回结果(json)。
修改AndroidManifest.xml文件添加联网权限 :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.xxx">
<uses-permission android:name="android.permission.INTERNET" />
<application
......
</application>
</manifest>
”调用网络接口API“工具类 :
public class HttpUtil {
// 获取网络数据
public static String getJSON(String path) {
String json = "";
try {
// 将数据转为url对象
URL url = new URL(path);
// 获取网络连接对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 开始连接
conn.connect();
// 读取输入流内容
InputStream is = conn.getInputStream();
// 读取流
int hasRead = 0;
byte[] buf = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// 循环读取
while (true) {
hasRead = is.read(buf);
if (hasRead == -1) {
break;
}
bos.write(buf, 0, hasRead);
}
is.close();
json = bos.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
}
“并行执行调用接口”工具类 :
public class LoadDataAsyncTask extends AsyncTask<String, Void, String> {
Context context;
onGetNetDataListener listener;
ProgressDialog dialog;
boolean flag = false;
private void initDialog() {
dialog = new ProgressDialog(context);
dialog.setTitle("提示信息");
dialog.setMessage("正在加载中....");
}
// 参数说明:
// 1. 上下文this, 2. 获取返回结果后的回调方法, 3. 是否显示“正在加载”动画
public LoadDataAsyncTask(Context context, onGetNetDataListener listener, boolean flag) {
this.context = context;
this.listener = listener;
this.flag = flag;
initDialog();
}
// 获取网络数据接口
public interface onGetNetDataListener {
public void onSucess(String json);
}
// 运行在子线程中,进行耗时操作等逻辑
@Override
protected String doInBackground(String... params) {
String json = HttpUtil.getJSON(params[0]);
return json;
}
// 运行主线程中,通常用来进行控件的初始化
@Override
protected void onPreExecute() {
super.onPreExecute();
if (flag) {
dialog.show();
}
}
// 运行在主线程中,用来获取doInBackground的返回数据,还可以进行控件更新
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (flag) {
dialog.dismiss(); // 返回数据了就要取消提示
}
listener.onSucess(s);
}
}
导入gson依赖包 :
修改module下build.gradle文件
dependencies {
......
implementation 'com.google.code.gson:gson:2.8.9'
......
}
然后重新“Sync Now”
调用示例:
final String SAYING_API = "https://api.vvhan.com/api/ian?type=json";
// 调用接口api
LoadDataAsyncTask task = new LoadDataAsyncTask(mContext, this, false);
task.execute(SAYING_API);
// 重写成功获取返回数据的回调方法
@Override
public void onSucess(String json) {
Map<String, Object> map = new Gson().fromJson(json, Map.class);
if (map != null) {
Log.d(TAG, "onSucess: " + map.toString());
} else {
Toast.makeText(this, "调用接口失败,请稍后再试", Toast.LENGTH_SHORT).show();
}
}
以上就是调用网络接口API并处理返回结果(json)的内容。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!