猿问

为 AsyncTask 实现一个常规的 JSON 解析器函数

我正在开发一个应用程序,它有很多远程 JSON 调用来获取数据并在应用程序中实现。


目前,我正在使用此函数从 URL 获取 JSON 数据并对其进行解析。


但不幸的是,它会冻结应用程序,直到下载 JSON 文件。


在谷歌上搜索,发现 AsyncTask 可以解决这个问题。


我刚刚开始进行android应用程序开发。我试过但失败了。


你们能帮我把这个功能实现到 AsyncTask 吗?


public class JSONParser {


String charset = "UTF-8";

HttpURLConnection conn;

DataOutputStream wr;

StringBuilder result;

URL urlObj;

JSONObject jObj = null;

JSONArray jAry = null;

StringBuilder sbParams;

String paramsString;


public JSONObject makeHttpRequest(String url, String method, HashMap<String, String> params) {


    sbParams = new StringBuilder();

    int i = 0;

    for (String key : params.keySet()) {

        try {

            if (i != 0) {

                sbParams.append("&");

            }

            sbParams.append(key).append("=")

                    .append(URLEncoder.encode(params.get(key), charset));


        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        i++;

    }


    if (method.equals("POST")) {

        try {

            urlObj = new URL(url);

            conn = (HttpURLConnection) urlObj.openConnection();

            conn.setDoOutput(true);

            conn.setRequestMethod("POST");

            conn.setRequestProperty("Accept-Charset", charset);

            conn.setReadTimeout(10000);

            conn.setConnectTimeout(15000);

            conn.connect();

            paramsString = sbParams.toString();

            wr = new DataOutputStream(conn.getOutputStream());

            wr.writeBytes(paramsString);

            wr.flush();

            wr.close();


        } catch (IOException e) {

            e.printStackTrace();

        }

    } else if (method.equals("GET")) {

        if (sbParams.length() != 0) {

            url += "?" + sbParams.toString();

        }

明月笑刀无情
浏览 107回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答