gpt4 book ai didi

android - JSON 不适用于 Android Lollipop

转载 作者:行者123 更新时间:2023-11-29 17:44:49 25 4
gpt4 key购买 nike

在我的项目中,我创建了一个 ListView ,其中显示的数据来自 JSON(通过 BaseAdapter)。在适配器的初始化中,我初始化了 AsyncTask,其中包含对 JSON 的调用,并显示了进度对话框。

在所有 android 版本中一切正常,但在 android lollipop 中加载不会停止。

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)));
}

我停止在“BEFORE TRY/CATCH”中获取任何日志。按照 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 是问题的根源?我该怎么办?

最佳答案

好的,所以在寻找答案之后,问题似乎不在我的代码中,而是在 android 5 中。

我尝试了很多 JsonArray/JsonObject 教程,下载了它们的示例等,但没有任何效果。此外,我目睹了越来越多的开发人员遇到同样的问题。

感谢 Lena 的建议,我再次尝试了 GSON,这次成功了。上次我厌倦了使用 GSON,问题是我的实现不力。

谢谢大家

关于android - JSON 不适用于 Android Lollipop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27395670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com