我正在开发一个应用程序,它有很多远程 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();
}
相关分类