显示ProgressDialog时为什么会出现异常?

时间:2013-12-04 05:34:38

标签: android android-activity

我想在活动停止前显示ProgressDialog,因为我应该保存数据。

因此。我试过跟随。

但是。 ProgressDialog不显示并发生异常。

如何解决这个问题?

public class MyActivity extends Activity implements View.OnClickListener {

    Button btn_SecondAct;
    private ProgressDialog pgd_saveDB;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btn_SecondAct = (Button) findViewById(R.id.btnSecondAct);
        btn_SecondAct.setOnClickListener(this);

        createProgressDialog();
    }

    void createProgressDialog() {
        pgd_saveDB = new ProgressDialog(this);
        pgd_saveDB.setCancelable(false);
        pgd_saveDB.setMessage("On Saving DB data...");
        pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

        // reset the bar to the default value of 0
        pgd_saveDB.setProgress(0);

        pgd_saveDB.setMax(100);
    }

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(getApplicationContext(), SecActivity.class);
        startActivity(intent);
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("myTag", "onPause");

        pgd_saveDB.show();

        for (int i = 0; i < 100; i++) {
            pgd_saveDB.setProgress(i);

            // Here is saveDataToDB line.
            msh_handler.insertDTO((B_E_BuyDB_DTO) lst_sltTabListRowGroup.get(i));
        }

        pgd_saveDB.dismiss();
    }


package com.example.ProgressDialog;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

/**
 * Created by user on 13. 12. 4.
 */
public class SecActivity extends Activity implements View.OnClickListener{

    Button btn_MainAct;
    private ProgressDialog pgd_saveDB;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        btn_MainAct = (Button) findViewById(R.id.btnMainAct);
        btn_MainAct.setOnClickListener(this);

        createProgressDialog();
    }

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(getApplicationContext(), MyActivity.class);
        startActivity(intent);
    }

    void createProgressDialog() {
        pgd_saveDB = new ProgressDialog(this);
        pgd_saveDB.setCancelable(false);
        pgd_saveDB.setMessage("On Saving DB data...");
        pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

        // reset the bar to the default value of 0
        pgd_saveDB.setProgress(0);

        pgd_saveDB.setMax(1000);
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d("myTag", "onPause");

        pgd_saveDB.show();

        for (int i = 0; i < 100; i++) {
            pgd_saveDB.setProgress(i);
        }

        pgd_saveDB.dismiss();
    }
}


这是异常消息。

12-04 14:28:18.675  24407-24407/com.example.ProgressDialog E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ProgressDialog/com.example.ProgressDialog.SecActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
            at android.app.ActivityThread.access$1500(ActivityThread.java:117)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3687)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.ProgressDialog.SecActivity.onCreate(SecActivity.java:23)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
            at android.app.ActivityThread.access$1500(ActivityThread.java:117)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3687)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
            at dalvik.system.NativeStart.main(Native Method)
12-04 14:28:18.683      227-243/? E/﹕ Dumpstate > /data/log/dumpstate_app_error

3 个答案:

答案 0 :(得分:0)

在onPause内部将对话框置于异步任务中:

 public class youtask extends AsyncTask<Void, Integer, String>
    {

         @Override
            protected void onPreExecute() {

                pgd_saveDB = new ProgressDialog(this);
    pgd_saveDB.setCancelable(false);
    pgd_saveDB.setMessage("On Saving DB data...");
    pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

    // reset the bar to the default value of 0
    pgd_saveDB.setProgress(0);

    pgd_saveDB.setMax(100);
     pgd_saveDB.show();

            }


        @Override
        protected String doInBackground(Void... params) {

            for (int i = 0; i < 100; i++) {

             @Override
       public void transferred(long num) {
        publishProgress((int) (i);
                     }


        // Here is saveDataToDB line.
        msh_handler.insertDTO((B_E_BuyDB_DTO) lst_sltTabListRowGroup.get(i));
    }


        }


         @Override
            protected void onProgressUpdate(Integer... progress) {
                pgd_saveDB.setProgress((int) (progress[0]));
            }

        protected void onPostExecute(Void result) {

             //result is the response back from "doInBackground"
            dialog.cancel();


            }



        }

答案 1 :(得分:0)

缺少setContentView

public class SecActivity extends Activity implements View.OnClickListener{

    Button btn_MainAct;
    private ProgressDialog pgd_saveDB;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondactivity); //missing

答案 2 :(得分:0)

无需在创建活动时创建进度对话框的初始化。

每当您需要时,然后创建对话框。根据您的要求,您可以按照以下方式...

public class Activity_leave extends AsyncTask<Integer, Integer, Integer> 
{


    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

         pgd_saveDB = new ProgressDialog(this);
            pgd_saveDB.setCancelable(false);
            pgd_saveDB.setMessage("On Saving DB data...");
            pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

            // reset the bar to the default value of 0
            pgd_saveDB.setProgress(0);

            pgd_saveDB.setMax(1000);
    }
    @Override
    protected Integer doInBackground(Integer... params) {
        // TODO Auto-generated method stub

        //Write your saving code here..
        return null;
    }

    @Override
    protected void onPostExecute(Integer result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        Intent intent = new Intent(getApplicationContext(), MyActivity.class);
        startActivity(intent);
    }

}