我在下面的Assets文件夹中有JSON本地文件,但有10,000多个对象,当我读取它们时,它花费了40秒钟以上的时间并冻结了该应用程序,所以有人可以解释我如何在Asynctask中做到这一点吗?
{
"status": true,
"result": [
{
"id": 22,
"name": "T........",
}
]
}
代码
try {
InputStream inputStream = getAssets().open("LocalTest.json");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String Categories = new String(buffer, "UTF-8");
JSONObject jsonObject = new JSONObject(Categories);
for (int x = 0; x < jsonObject.getJSONArray("result").length(); x++) {
//Put data in array
}
} catch (JSONException | IOException e) {
e.printStackTrace();
}
我没有Asynctask的背景,所以有人可以帮忙转换吗?
可选:如果有可能增加进度并显示百分比,我会很高兴。
答案 0 :(得分:0)
现在不推荐使用Asynctask。但是,您可以使用Thread作为示例:
const s3 = new S3({
region: 'eu-central-1',
});
答案 1 :(得分:0)
不是创建新线程,而是必须使用AsyncTask类,它是用于Android后台任务的特殊类。您的代码段可能像下面的家伙。
创建一个名为FileReadAsyncTask的新类
public class FileReadAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
try {
InputStream inputStream = getAssets().open("LocalTest.json");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String Categories = new String(buffer, "UTF-8");
JSONObject jsonObject = new JSONObject(Categories);
for (int x = 0; x < jsonObject.getJSONArray("result").length(); x++) {
//Put data in array
}
} catch (JSONException | IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onCancelled(Void result) {
super.onCancelled(result);
}
}
然后从MainActivity或另一个类中调用
new FileReadAsyncTask ().execute((Void) null);