线程NullPointer异常中的进度对话框

时间:2015-03-12 15:09:53

标签: android

嗨我有一个片段,当我从我的MainActivity调用它时,我开始一个线程来显示BD的某些东西

private ProgressDialog progressDialog;

@Override
    public void onStart()
    {
        super.onStart();

        Bundle args = getArguments();

        if ( args != ) 
        {
            progressDialog.show( getActivity(), "Query", "Please wait", true, false );
            // Here i call my thread
            mRutFechas( progressDialog );
        }
    }

我的帖子

private void mRutFechas( final ProgressDialog progressDialog )
{
        Thread nt = new Thread()
        {
            @Override
            public void run()
            {
                // Lot of BD Conecction work

                 // Display
                 getActivity().runOnUiThread( new Runnable()
                 {
                     @Override
                     public void run()
                     {
                         // Screen update
                     }
                 });
              progressDialog.dismiss();
            }
        };
        nt.start();
}

popup show属性但是当它接近显示抛出的时间

03-12 11:52:29.132  25504-25618/com.example.camilo.relojcontrol_navdraw E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-9962
    java.lang.NullPointerException
            at com.example.camilo.relojcontrol_navdraw.F_RelojMostrar$2.run(F_RelojMostrar.java:301)

编辑:当我输入运行UI线程时,它给了我这个错误

03-12 12:20:09.652  27235-27235/com.example.camilo.relojcontrol_navdraw E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.example.camilo.relojcontrol_navdraw.F_RelojMostrar$2$1.run(F_RelojMostrar.java:300)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4963)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:0)

主线程也称为 UI线程。这意味着您无法更新任何其他线程中的任何UI,但主线程。因此,您无法在后台线程中关闭ProgressDialog。把它放在主线程中,一切都会好的。

getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run()
    {
        progressDialog.dismiss();
    }
});

答案 1 :(得分:0)

ProgressDialog progressDialog;

中的mRutFechas() NULL

因为show()方法会将ProgresssDialog创建为静态

尝试使用

进行更改
private ProgressDialog progressDialog;

@Override
 public void onStart()
 {
  super.onStart();
  Bundle args = getArguments();
  if ( args != ) 
   {
    progressDialog = new ProgressDialog(getActivity());
    progressDialog.setTitle("Query");
    progressDialog.setMessage("Please wait");
    progressDialog.setCancelable(true);
    progressDialog.show();

    // Here i call my thread
    mRutFechas(progressDialog);

试试这个,让我知道发生了什么......

答案 2 :(得分:0)

请初始化您的进度对话框:

private ProgressDialog progressDialog;

progressDialog = new ProgressDialog(Mainactivity.this);
相关问题