Android 为什么对话框给出空值?
下面是我的代码。在这里,我运行一个带有标题的ProgressBar线程 在线程的run()中,如果我的internet连接正常,那么ELSE部分将执行并关闭ProgressBar。但若我的互联网连接不起作用,那个么若pat得到execute,当我试图关闭ProgressBar时,我会得到null异常。我还添加了is null checkif(m_ProgressDialog==null),并以null打印拨号框 我的代码怎么了。?ProgressBar在ELSE部分中解除,但在IF中抛出空异常Android 为什么对话框给出空值?,android,progressdialog,Android,Progressdialog,下面是我的代码。在这里,我运行一个带有标题的ProgressBar线程 在线程的run()中,如果我的internet连接正常,那么ELSE部分将执行并关闭ProgressBar。但若我的互联网连接不起作用,那个么若pat得到execute,当我试图关闭ProgressBar时,我会得到null异常。我还添加了is null checkif(m_ProgressDialog==null),并以null打印拨号框 我的代码怎么了。?ProgressBar在ELSE部分中解除,但在IF中抛出空异常
public void onCreate(Bundle savedInstanceState) {
.....................
.....................
//some CODE //
.....................
.....................
viewOrders = new Runnable(){
@Override
public void run() {
try {
if(!utilityFunctions.HaveNetworkConnection(SplashScreenActivity.this)) //checking internet connection
{
Log.i(UtilityFunctions.APP_TAG, "NO Connecttion");
//updateUI(0);
if(m_ProgressDialog == null)
Log.i(UtilityFunctions.APP_TAG, "DialogBox is NULL");
else
m_ProgressDialog.dismiss();
Log.i(UtilityFunctions.APP_TAG, "Dismissed");
handler.sendEmptyMessage(0);
}
else
{
try {
m_ProgressDialog.dismiss();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Intent mainIntent = new Intent().setClass(SplashScreenActivity.this, MainActivity.class);
Log.i(UtilityFunctions.APP_TAG, "Starting Program");
startActivity(mainIntent);
finish();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
//super.dispatchMessage(msg);
super.handleMessage(msg);
updateUI(msg.what);
}
};
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(SplashScreenActivity.this, "Please wait...", "Getting required data from server. This is an one time activity...", true);
}
public void updateUI(int code){
Log.i(UtilityFunctions.APP_TAG, "updateUI");
if(code == 0)
Toast.makeText(SplashScreenActivity.this, "Unable to verify application signature. Please Check your internet connection & try again", Toast.LENGTH_LONG).show();
else
Toast.makeText(SplashScreenActivity.this, "Unable to process request. ", Toast.LENGTH_LONG).show();
}
尝试在顶部声明
ProgressDialog()
public void onCreate(Bundle savedInstanceState) {
....................
.....................
//some CODE //
m_ProgressDialog = ProgressDialog.show(SplashScreenActivity.this, "Please wait...",
"Getting required data from server. This is an one time activity...", true);
.....................
viewOrders = new Runnable(){
@Override
public void run() {
try {
if(!utilityFunctions.HaveNetworkConnection(SplashScreenActivity.this)) //checking internet connection
{
Log.i(UtilityFunctions.APP_TAG, "NO Connecttion");
//updateUI(0);
if(m_ProgressDialog == null)
Log.i(UtilityFunctions.APP_TAG, "DialogBox is NULL");
else
m_ProgressDialog.dismiss();
Log.i(UtilityFunctions.APP_TAG, "Dismissed");
handler.sendEmptyMessage(0);
}
else
{
try {
m_ProgressDialog.dismiss();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Intent mainIntent = new Intent().setClass(SplashScreenActivity.this, MainActivity.class);
Log.i(UtilityFunctions.APP_TAG, "Starting Program");
startActivity(mainIntent);
finish();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
//super.dispatchMessage(msg);
super.handleMessage(msg);
updateUI(msg.what);
}
};
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
}
public void updateUI(int code){
Log.i(UtilityFunctions.APP_TAG, "updateUI");
if(code == 0)
Toast.makeText(SplashScreenActivity.this, "Unable to verify application
signature. Please Check your internet connection & try again",
Toast.LENGTH_LONG).show();
else
Toast.makeText(SplashScreenActivity.this, "Unable to process request. ",
Toast.LENGTH_LONG).show();
}
希望这对您有所帮助。尝试在顶部声明
ProgressDialog()
public void onCreate(Bundle savedInstanceState) {
....................
.....................
//some CODE //
m_ProgressDialog = ProgressDialog.show(SplashScreenActivity.this, "Please wait...",
"Getting required data from server. This is an one time activity...", true);
.....................
viewOrders = new Runnable(){
@Override
public void run() {
try {
if(!utilityFunctions.HaveNetworkConnection(SplashScreenActivity.this)) //checking internet connection
{
Log.i(UtilityFunctions.APP_TAG, "NO Connecttion");
//updateUI(0);
if(m_ProgressDialog == null)
Log.i(UtilityFunctions.APP_TAG, "DialogBox is NULL");
else
m_ProgressDialog.dismiss();
Log.i(UtilityFunctions.APP_TAG, "Dismissed");
handler.sendEmptyMessage(0);
}
else
{
try {
m_ProgressDialog.dismiss();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Intent mainIntent = new Intent().setClass(SplashScreenActivity.this, MainActivity.class);
Log.i(UtilityFunctions.APP_TAG, "Starting Program");
startActivity(mainIntent);
finish();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
//super.dispatchMessage(msg);
super.handleMessage(msg);
updateUI(msg.what);
}
};
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
}
public void updateUI(int code){
Log.i(UtilityFunctions.APP_TAG, "updateUI");
if(code == 0)
Toast.makeText(SplashScreenActivity.this, "Unable to verify application
signature. Please Check your internet connection & try again",
Toast.LENGTH_LONG).show();
else
Toast.makeText(SplashScreenActivity.this, "Unable to process request. ",
Toast.LENGTH_LONG).show();
}
希望这能帮助您在调用线程之前初始化进度对话框
m_ProgressDialog = ProgressDialog.show(SplashScreenActivity.this, "Please wait...", "Getting required data from server. This is an one time activity...", true);
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
希望这对您有帮助…在调用线程之前初始化进度对话框
m_ProgressDialog = ProgressDialog.show(SplashScreenActivity.this, "Please wait...", "Getting required data from server. This is an one time activity...", true);
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
希望这有帮助…事实上,在启动线程之前创建进度对话框,应该可以。是的,Finuka是正确的,问题是运行viewOrders的线程有可能在调用start()方法时立即启动,从而使m_ProgressDialog处于空状态。但是@Kai&Finuka,为什么其他部分没有给出空异常错误?原因是你的速度很幸运。让我解释一下。运行线程并显示对话框。运行线程时,应用程序检查if条件并转到else部分所需的时间就足够了。此时,主线程有足够的时间创建对话框。但是,如果您没有internet,当您尝试访问该对话框时,主线程没有时间创建它。事实上,在启动线程之前创建进度对话框应该可以工作是的,Finuka是正确的,问题是运行viewOrders的线程可能会在其start()时立即启动方法被调用,从而使m_ProgressDialog处于空状态。但是@Kai&Finuka,为什么ELSE部分没有给出空异常错误?原因是你很幸运有这样的速度。让我解释一下。运行线程并显示对话框。运行线程时,应用程序检查if条件并转到else部分所需的时间就足够了。此时,主线程有足够的时间创建对话框。但是,如果您没有internet,当您尝试访问该对话框时,主线程没有时间创建它。