![](/img/trans.png)
[英]Android app crash on 3G slow connection but works fine over wifi
[英]Android application crashing on 3G, slow connection, but works over WIFI
我正在優化一個簡單的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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.