Android开发实用小技巧五——调用网络接口API并处理返回结果(json) - Go语言中文社区

Android开发实用小技巧五——调用网络接口API并处理返回结果(json)


文章目录


前言

调用网络接口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)的内容。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_37371109/article/details/125260110
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-02 20:26:45
  • 阅读 ( 103 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢