Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 线程空指针异常中的进度对话框_Android - Fatal编程技术网

Android 线程空指针异常中的进度对话框

Android 线程空指针异常中的进度对话框,android,Android,嗨,我有一个片段,当我从MainActivity调用它时,我启动一个线程来显示BD的一些内容 private ProgressDialog progressDialog; @Override public void onStart() { super.onStart(); Bundle args = getArguments(); if ( args != ) { progressDi

嗨,我有一个片段,当我从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();
}
弹出窗口将正确显示,但关闭显示的时间已到

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)

主线程也称为UI线程。这意味着除了主线程外,您不能更新任何其他线程中的任何UI。因此,您不能在后台线程中取消ProgressDialog。只要把它放在主线上,一切都会好起来的

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

您的
ProgressDialog
mRutFechas()中为NULL

因为
show()
方法将创建一个作为静态的进程对话框

试着改变它

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);

尝试此操作并让我知道发生了什么。

请初始化进度对话框:

private ProgressDialog progressDialog;

progressDialog = new ProgressDialog(Mainactivity.this);

您应该使用AsyncTaskput
progressDialog.Disclease()
run()的
runOnUiThread
方法的内部作为最后一行。发布完整的堆栈跟踪(错误日志)。编辑错误日志哪个是
F_RelojMostrar.java
中的代码行300?在UI线程中运行给我03-12 12:20:09.652 27235-27235/com.example.camilo.relojcontrol\u navdraw E/androjruntime﹕ 致命异常:main java.lang.NullPointerException检查主帖子我编辑了错误logidk为什么我会出现nullpointer异常,也许如果我尝试异步任务?显然progressDialog变量为null。请尝试进行步骤调试,看看它是否真的为空以及原因。是的,我忘记了初始化,正如您所说的
ProgressDialog ProgressDialog=newprogressdialog(yourActivity.this)现在它不是空的,但是在线程内部我不能放置代码'progressDialog.Disclease();`因为编译器说
错误:(299,25)错误:从内部类访问局部变量progressDialog;需要声明为final
因此,如果我将我的方法声明为静态变量
private void mRutFechas(final ProgressDialog ProgressDialog)
弹出窗口会显示在屏幕上,但不会关闭并永远显示。-tyfeedback@Junshi-这是runOnUiThread()的
run()
中的最后一行吗?它应该在那里。并声明
ProgressDialog ProgressDialog
为代码上方的类级成员,仅供您理解。在
onStart()
中,它看起来像
progressDialog=newprogressdialog(getActivity())。是的,这是最后一个UI运行线程,这是一个棘手的问题,我可以尝试异步任务吗?