在我的项目中,我创建了一个列表视图,其中包含JSON显示的数据(通过BaseAdapter)。 在初始化适配器时,我初始化包含JSON调用的AsyncTask,并显示进度对话框。
在所有Android版本中一切正常,但在android棒棒糖中加载只是没有停止。
private class NewsJsonAsync extends AsyncTask<Void, Void, Boolean> {
private String mURLString = "http://json.com/json.json";
private ProgressDialog mProgressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(mContext);
mProgressDialog.setMessage(mContext.getString(R.string.dialog_loading_title));
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
@Override
protected Boolean doInBackground(Void... params) {
Log.d("DO IN BACKGROUND", "BEFORE TRY/CATCH");
try {
String stream = streamManager();
jsonManager(stream);
} catch (JSONException e) {
e.printStackTrace();
Log.d("JSON EXCEPTION HERE", e.getLocalizedMessage());
return false;
} catch (IOException e) {
e.printStackTrace();
Log.d("IO EXCEPTION HERE", e.getLocalizedMessage());
return false;
}
Log.d("DO IN BACKGROUND", "AFTER TRY/CATCH");
return true;
}
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result == true) {
notifyDataSetChanged();
mProgressDialog.dismiss();
} else {
mProgressDialog.dismiss();
}
}
private String streamManager() throws IOException {
URL url = new URL(mURLString);
InputStream stream = url.openStream(); //open the data stream
byte[] bytes = new byte[stream.available()];
String getBytes = ""; //holds the data recived for the server in their raw form
int countBytes; //indicator for the amount of bytes left
while ((countBytes = stream.read(bytes)) > -1 ) { //while the stream size is more then -1 (while there is still data)
getBytes += new String(bytes,0,countBytes); //add the data to the string
}
stream.close();
return getBytes;
}
protected void jsonManager (String data) throws JSONException {
JSONArray jsonArray = new JSONArray(data); //call the JSON GENERAL array
String title = "";
String subtitle = "";
int size = jsonArray.length();
for (int i = 0; i < size; i++) {
JSONObject jsonArticle = jsonArray.getJSONObject(i);
title = jsonArticle.getString(Enums.JSON_TITLE.getValue());
subtitle = jsonArticle.getString(Enums.JSON_SUBTITLE.getValue());
mArray.add(new NewsListWithDB(title, subtitle)));
}
我停止获取任何日志&#34;在尝试/捕获之前&#34;。 在Log-cat之后我认为它可能与我反复发送的一条消息有关
12-10 09:38:38.991: I/art(23270): Background sticky concurrent mark sweep GC freed 263748(8MB) AllocSpace objects, 0(0B) LOS objects, 33% free, 10MB/16MB, paused 1.617ms total 107.675ms
可能是ART是问题的根源吗?我该怎么办?
答案 0 :(得分:2)
好的,所以在寻找答案之后,似乎问题不在于我的代码,问题在于android 5.
我尝试了很多JsonArray / JsonObject教程,下载了他们的样本等,但没有任何效果。此外,我目睹了越来越多的开发人员遭遇同样的问题。
感谢Lena的建议我再次尝试了GSON,这次它起作用了。上次我厌倦了使用GSON问题是我执行不力。
谢谢大家。
答案 1 :(得分:1)
所以我遇到了类似的问题。我的应用程序将json对象存储到对象数据库neodatis。最近,似乎将应用程序升级到棒棒糖会导致各种崩溃。
从日志中,看起来他们将JSONObject的内部数据结构从HashMap更改为LinkedHashMap。如果您在棒棒糖前保存了数据,则一旦手机升级到棒棒糖,就会出现问题。