嗨我有一个片段,当我从我的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)
答案 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);