当前位置:   article > 正文

Android开发实用小技巧五——调用网络接口API并处理返回结果(json)_android // 自定义网络事件接口

android // 自定义网络事件接口

文章目录


前言

调用网络接口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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

”调用网络接口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;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

“并行执行调用接口”工具类 :

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);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

导入gson依赖包 :

修改module下build.gradle文件

dependencies {
	......
    implementation 'com.google.code.gson:gson:2.8.9'
    ......
}
  • 1
  • 2
  • 3
  • 4
  • 5

然后重新“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);
  • 1
  • 2
  • 3
  • 4
// 重写成功获取返回数据的回调方法
@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();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

总结

以上就是调用网络接口API并处理返回结果(json)的内容。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/264937
推荐阅读
相关标签
  

闽ICP备14008679号