赞
踩
调用网络接口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)的内容。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。