通过url下载Json

HttpGet
URLConnection

网络权限

<uses-permission android:name="android.permission.INTERNET" />

1、方式1 - okHttp

依赖

//okHttp
implementation 'com.squareup.okhttp3:okhttp:3.4.1'

接口

public interface GetJsonDataCallback {

    void getJsonDataSuccess(String jsonData);

    void getJsonDataFailed(String errMsg);
}

使用

	/**
     * 获取 json 数据
     *
     * @param url      请求地址
     * @param callback 结果回调
     */
    public void getJsonDataByOkHttp(String url, final GetJsonDataCallback callback) {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                callback.getJsonDataFailed(e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                InputStream inputStream = response.body().byteStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder stringBuilder = new StringBuilder();
                String line = "";
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                callback.getJsonDataSuccess(stringBuilder.toString());
            }
        });
    }

2、方法2 - URLConnection、HttpURLConnection

依赖

//URLConnection、HttpURLConnection
implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1'

方法定义

public class GetJsonUtils {
    /**
     * 获取 json 数据 - URLConnection
     *
     * @param jsonUrl 请求地址
     * @return 结果数据
     */
    public static String getJsonDataByURLConnection(String jsonUrl) {
        StringBuilder resultData = new StringBuilder();
        try {
            URL url = new URL(jsonUrl);
            URLConnection connection = url.openConnection();
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                resultData.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultData.append(e.getMessage());
        }
        return resultData.toString();
    }


    /**
     * 获取 json 数据 - HttpURLConnection
     *
     * @param jsonUrl
     * @return
     */
    public static String getJsonDataByHttpURLConnection(String jsonUrl) {
        StringBuilder resultData = new StringBuilder();
        try {
            URL url = new URL(jsonUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(60 * 1000);
            connection.setRequestMethod("POST");
            connection.connect();
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    resultData.append(line);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultData.append(e.getMessage());
        }
        return resultData.toString();
    }
}

异步线程

public class GetJsonTask extends AsyncTask<String, Void, String> {

    /**
     * 接收输入参数、执行任务中的耗时操作、返回 线程任务执行的结果
     *
     * @param urls
     * @return
     */
    @Override
    protected String doInBackground(String... urls) {
        return GetJsonUtils.getJsonDataByURLConnection(urls[0]);
    }


    /**
     * 接收线程任务执行结果、将执行结果显示到UI组件
     *
     * @param result
     */
    @Override
    protected void onPostExecute(String result) {
        Log.i("TAG_ZLZ", "------ result : " + result);
    }
}

使用

	public void getJsonClick(View view) {
        new GetJsonTask().execute(JSON_URL);
    }
上一篇:java同意结果返回(链式编程结果)


下一篇:BS结构RFID读写器web插件开发之十-----NTAG标签操作