gpt4 book ai didi

android - 跳过 147 帧!应用程序可能在其主线程上做了太多工作

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:07 24 4
gpt4 key购买 nike

我理解这个错误的意思。我在 stackoverflow.com 上发现了许多类似的问题,并且我已尝试实现建议的答案,但我仍然收到此错误。我想做的是使用 php web 服务,我从 mysql 数据库服务器中提取数据,并尝试使用 AsyncTask 在 ListView 中显示它,如下所示:

class LoadAllProducts extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> 
{
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
protected ArrayList<HashMap<String, String>> doInBackground(String... args)
{
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

Log.d("All Products: ", json.toString());
try {

JSONArray files = json.getJSONArray(TAG_FILES);
for(int i=0;i<files.length();i++)
{
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = files.getJSONObject(i);


String file_name = e.getString(TAG_FILE_NAME);
String sender = e.getString(TAG_SENDER);
String subject = e.getString(TAG_SUBJECT);


map.put(TAG_SENDER, sender);
map.put(TAG_SUBJECT, subject);

mylist.add(map);
}


} catch (JSONException e)
{
e.printStackTrace();
Log.e("log_tag", "Error parsing data "+e.toString());
}

return mylist;

}

许多答案都建议所有处理都应该在 doInBackground 函数中完成。下面是在 ListView 中显示此数组列表的代码

 protected void onPostExecute(String file_url) 
{

pDialog.dismiss();

runOnUiThread(new Runnable()
{
public void run()
{
String[] from = { TAG_SENDER, TAG_SUBJECT };
int[] to = { android.R.id.text1, android.R.id.text2 };


ListAdapter adapter = new SimpleAdapter(AllProductsActivity.this, mylist,
android.R.layout.simple_list_item_2, from , to);
setListAdapter(adapter);

}
});

}

请帮助,因为首先我是 android 的初学者,我不知道如何解决这个问题。请检查我的代码并让我知道问题。

最佳答案

如果您的主线程做太多工作,就会出现这种类型的错误。基本上,当我们在模拟器中测试我们的应用程序时,跳帧会发生最长时间,因为它已经很慢并且无法像设备一样处理大量操作。

我在您的代码中看到了一个简单的问题。我们知道 onPostExecute() 在 MainThread 上运行,但您仍然在 onPostExecute() 中使用 runOnUiThread(new Runnable()

你的 doinbackground 方法返回一个 ArrayList ,但是你的 onpostexecute 持有一个字符串..

将其更改为我的 onPostExecute' 参数,即您在适配器中使用的 ArrayList(mylist)。

编辑

  class LoadAllProducts extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> {

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
protected ArrayList<HashMap<String, String>> doInBackground(String... args){
HttpClient client = new DefaultHttpClient();
HttpGet getData = new HttpGet("your_url");
HttpResponse response = client.execute(getData);
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String data = "";

while((data = br.readLine()) != null){
JsonArray arr = new JsonArray(data);
for(int i=0;i<arr.length();i++)
{
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = arr.getJSONObject(i);

String file_name = e.getString(TAG_FILE_NAME);
String sender = e.getString(TAG_SENDER);
String subject = e.getString(TAG_SUBJECT);


map.put(TAG_SENDER, sender);
map.put(TAG_SUBJECT, subject);

mylist.add(map);

}

return mylist;

}

protected void onPostExecute(ArrayList<HashMap<String, String>> mylist) {
String[] from = { TAG_SENDER, TAG_SUBJECT };
int[] to = { android.R.id.text1, android.R.id.text2 };


ListAdapter adapter = new SimpleAdapter(AllProductsActivity.this, mylist,
android.R.layout.simple_list_item_2, from , to);
setListAdapter(adapter);

pDialog.dismiss();

}

关于android - 跳过 147 帧!应用程序可能在其主线程上做了太多工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21507967/

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