通过按钮从活动调用异步任务...在活动切换到另一个活动后出现progressdialog

时间:2013-07-09 17:47:59

标签: android asynchronous task progressdialog

我现在正坐在小时,以便进行一次进步...

我在stackoverflow和其他网站上看了很多这样的例子。

问题:

我正在向活动添加进度对话框,并在按下按钮时将其移交给异步任务。 按下按钮时,活动显示大约2-3秒而没有progressdialog,在切换到另一个活动后,progressdialog显示并在异步任务完成后终止。 Coreographer告诉我,主要的活动是...... bla bla ..

// Get Position Button
    getPosition = (Button) vg.findViewById(R.id.getPosition);
    getPosition.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (isAirplaneModeOn(PositionActivity.this) != true) {
                try {
                    // System.out.println("Airplanemode off!");
                    if (gpsFunc.canGetLocation()) {
                        SharedPreferences gps = PositionActivity.this
                                .getSharedPreferences(prefName,
                                        Context.MODE_PRIVATE);
                        String latlon = gps.getString("coordinates", null);

                        if (latlon != null) {
                            String[] split = latlon.split(";");
                            callWienerLinien();
                            latitude = Double.parseDouble(split[0]);
                            longitude = Double.parseDouble(split[1]);
                            pressed = (TextView) vg
                                    .findViewById(R.id.pressed);
                            long start = new Date().getTime();
                            TabActivity tabs = (TabActivity) getParent();
                            tabs.getTabHost().setCurrentTab(1);
                            long end = new Date().getTime();

                            System.out.println(end-start);

                        } else {
                            pressed.setText("Bitte Position setzen.");
                        }
                    } else {
                        buildAlertMessageNoDataNetwork();
                    }
                } catch (Exception e) {
                    errorOccuredMessage();
                }
            } else {
                pressed.setText("Bitte Flugzeugmodus deaktivieren.");
            }
        }

    });

public void callWienerLinien(){
    ProgressDialog pd = new ProgressDialog(this);
    pd.setMessage("Loading ...");
    pt = new PublicTransport(pd,this);
    pt.execute("http://webservice.qando.at/2.0/webservice.ft");
}

这是异步任务

    public PublicTransport(ProgressDialog pd,Context context){
    this.pd = pd;
    this.context = context;
    getLatLonDestination();
    getLatLonOrigin();
}



    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        System.out.println("onpre");
        pd.show();          
    }


        @Override
    protected void onPostExecute(ArrayList<PublicTransportBean> al) {
        System.out.println(al.get(0).getTripDuration());
        System.out.println("onpostExec");
        pd.dismiss();
    }

2 个答案:

答案 0 :(得分:1)

不要在线程中显示Progressdialog,在该线程中运行后台任务。我遇到了同样的问题并做了以下事情:

  1. 准备对话
  2. 显示对话框
  3. 启动后台任务
  4. 编辑:

    尝试按如下方式调用ProgressDialog:

          runOnUiThread(new Runnable() {              
                @Override
                public void run() {
                final ProgressDialog progressDialog=new ProgressDialog(cont);
                progressDialog.setMessage("Progress");
                progressDialog.show();
                }
            });
    

答案 1 :(得分:0)

我解决了这个问题......

我打电话给

 TabActivity tabs = (TabActivity) getParent();
                    tabs.getTabHost().setCurrentTab(1);

在异步任务的后执行中。 工作完美.....两行代码和13个小时的学习: - (