我优化了一个简单的Android应用程序,它使用HTTP GET调用(使用Apache HttpClient)从Web服务器读取数据。 传输的数据采用JSON格式。
在使用WIFI时应用程序非常慢,但每次手机切换到3G时,应用程序都会获取URL,但它无法解析。
org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
我使用AsyncTask打开后台线程:
private class DownloadJSONRepertoire extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
arrayList = new ArrayList<HashMap<String, String>>();
jsonObject = JSONfunctions.getJSONfromURL("http://example");
try {
jsonArray = jsonObject.getJSONArray("posts");
for(int i = 0; i< jsonArray.length();i++)
{
HashMap<String,String> map = new HashMap<String,String>();
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
String url = jsonObject1.getString("url");
String title = jsonObject1.getString("title");
String content = jsonObject1.getString("content");
map.put(SHAREURL,url);
map.put(TITLE,title);
map.put(CONTENT,content);
JSONArray jsonArray1 = jsonObject1.getJSONArray("attachments");
for(int j=0;j<jsonArray1.length();j++){
JSONObject jsonObject2 = jsonArray1.getJSONObject(j);
String urlImage = jsonObject2.getString("url");
map.put(URL, urlImage);
arrayList.add(map);
}
}
}
catch (JSONException e){
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args){
listView = (ListView) mActivity.findViewById(android.R.id.list);
adapter = new ListViewAdapter(mActivity, arrayList);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
progressBar.setVisibility(View.INVISIBLE);
}
}
JSONfunctions类:
public class JSONfunctions {
public static JSONObject getJSONfromURL(String url) {
InputStream is = null;
String result = "";
JSONObject jArray = null;
// Download JSON data from URL
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Failed to connect" + e.toString());
}
// Convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
try {
jArray = new JSONObject(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return jArray;
}
}