android – AsyncTask onPreExecute progressdialog

前端之家收集整理的这篇文章主要介绍了android – AsyncTask onPreExecute progressdialog前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当onPreExecute函数执行时,我有一个AsyncTask,它给了我一个例外

** java.lang.IllegalStateException: View
com.android.internal.policy.impl.PhoneWindow$DecorView@44ea0e20
has already been added to the window
manager.**

当progressDialog的show()方法调用时.

我的活动

public class TopNewsActivity extends ListActivity {

public static final String LOG_TAG = "Infra";
private ProgressDialog progressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholder);
    new BackgroundAsyncTask().execute();
}

public class BackgroundAsyncTask extends AsyncTask<String,Integer,ArrayList<HashMap<String,String>>> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(TopNewsActivity.this);
        progressDialog.setCancelable(true);
        progressDialog.setMessage("Loading...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setProgress(0);
        progressDialog.show();
    }

    @Override
    protected ArrayList<HashMap<String,String>> doInBackground(String... paths) {
        ArrayList<HashMap<String,String>> mylist = new ArrayList<HashMap<String,String>>();

        String xml = XMLfunctions.getTopNewsXML();
        Document doc = XMLfunctions.XMLfromString(xml);

        int numResults = XMLfunctions.numResults(doc);
        Log.d(LOG_TAG,"Number of Results: " + numResults);
        if ((numResults <= 0)) {
            Toast.makeText(TopNewsActivity.this,"No Result Found",Toast.LENGTH_LONG).show();
            finish();
        }

        NodeList nodes = doc.getElementsByTagName("result");

        for (int i = 0; i < nodes.getLength(); i++) {
            HashMap<String,String> map = new HashMap<String,String>();

            Element e = (Element) nodes.item(i);
            map.put("id",XMLfunctions.getValue(e,"id"));
            map.put("title","title"));
            mylist.add(map);
        }
        return mylist;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    protected void onPostExecute(ArrayList<HashMap<String,String>> result) {
        ListAdapter adapter = new SimpleAdapter(TopNewsActivity.this,result,R.layout.list_item,new String[] { "title" },new int[] { R.id.item_title });
        setListAdapter(adapter);
        progressDialog.dismiss();

        final ListView lv = getListView();

        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            @SuppressWarnings("unchecked")
            @Override
            public void onItemClick(AdapterView<?> a,View view,final int position,long id) {

                    HashMap<String,String> o = (HashMap<String,String>) lv.getItemAtPosition(position);

                    Intent i = new Intent(TopNewsActivity.this,NewsDetails.class);
                    i.putExtra("content_id",o.get("id"));
                    i.putExtra("title",o.get("title"));
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                    View v = TopNewsGroup.group.getLocalActivityManager().startActivity("ShowNews",i).getDecorView();

                    // Again,replace the view
                    TopNewsGroup.group.setContentView(v);

            }
        });

    }

}

public class MySimpleAdapter extends SimpleAdapter {
     public MySimpleAdapter(Context context,List<? extends Map<String,?>> data,int resource,String[] from,int[] to) {
        super(context,data,resource,from,to);
        // TODO Auto-generated constructor stub
}

}
}

请帮忙!!!!!

解决方法

progressdialogs和contexts有一个常见的问题,它一直发生在我身上,并且在这个问题上有一个关于android doc的部分.当上下文实际上是您的Java类的名称后跟“.this”时,您可能已使用“this”的上下文声明它.
dialog = ProgressDialog.show(Example.this,"","Doing stuff. Please wait...",true);

这是因为您希望progressDialog在主类中显示,而不是在Async类中显示.

如果这不能解决问题,您需要发布代码.

猜你在找的Android相关文章