Android 此代码段上的Null指针执行选项
嗨,我是android新手,我遇到了空指针异常。有人能告诉我这个代码的问题吗 代码如下Android 此代码段上的Null指针执行选项,android,Android,嗨,我是android新手,我遇到了空指针异常。有人能告诉我这个代码的问题吗 代码如下 @Override protected void onPreExecute() { super.onPreExecute(); pd = new ProgressDialog(mContext); //pd.setTitle("Sending Request !"); pd.setMessage(ActivityStrings.PROGRESS_MESSAGE_
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(mContext);
//pd.setTitle("Sending Request !");
pd.setMessage(ActivityStrings.PROGRESS_MESSAGE_PD);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setCancelable(false);
pd.setCanceledOnTouchOutside(false);
if (!((Activity) mContext).isFinishing()) {
pd.show();
}
}
提前谢谢
看这里的原木猫
05-31 01:57:12.568: E/AndroidRuntime(8329): FATAL EXCEPTION: main
05-31 01:57:12.568: E/AndroidRuntime(8329): java.lang.NullPointerException
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.app.AlertDialog.<init>(AlertDialog.java:98)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
05-31 01:57:12.568: E/AndroidRuntime(8329): at com.eeshana.android_29042014.AsynkTask.GuestLoginSenderAskTask.onPreExecute(GuestLoginSenderAskTask.java:72)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.os.AsyncTask.execute(AsyncTask.java:534)
05-31 01:57:12.568: E/AndroidRuntime(8329): at com.eeshana.android_04012014.checkthisapp.LoginScreen.callGuestLoginThread(LoginScreen.java:138)
05-31 01:57:12.568: E/AndroidRuntime(8329): at com.eeshana.android_04012014.checkthisapp.LoginScreen.onClick(LoginScreen.java:104)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.view.View.performClick(View.java:4084)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.os.Handler.handleCallback(Handler.java:615)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.os.Handler.dispatchMessage(Handler.java:92)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.os.Looper.loop(Looper.java:137)
05-31 01:57:12.568: E/AndroidRuntime(8329): at android.app.ActivityThread.main(ActivityThread.java:4745)
05-31 01:57:12.568: E/AndroidRuntime(8329): at java.lang.reflect.Method.invokeNative(Native Method)
05-31 01:57:12.568: E/AndroidRuntime(8329): at java.lang.reflect.Method.invoke(Method.java:511)
05-31 01:57:12.568: E/AndroidRuntime(8329): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-31 01:57:12.568: E/AndroidRuntime(8329): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
05-31 01:57:12.568:E/AndroidRuntime(8329):致命异常:main
05-31 01:57:12.568:E/AndroidRuntime(8329):java.lang.NullPointerException
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)上
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.app.AlertDialog.(AlertDialog.java:98)上
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.app.ProgressDialog.(ProgressDialog.java:77)
05-31 01:57:12.568:E/AndroidRuntime(8329):在com.eeshana.android_29042014.AsynkTask.GuestLoginSenderAskTask.onPreExecute(GuestLoginSenderAskTask.java:72)
05-31 01:57:12.568:E/AndroidRuntime(8329):位于android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.os.AsyncTask.execute(AsyncTask.java:534)
05-31 01:57:12.568:E/AndroidRuntime(8329):在com.eeshana.android_04012014.checkthisapp.LoginScreen.callGuestLoginThread(LoginScreen.java:138)
05-31 01:57:12.568:E/AndroidRuntime(8329):在com.eeshana.android_04012014.checkthisapp.LoginScreen.onClick(LoginScreen.java:104)
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.view.view.performClick(view.java:4084)上
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.os.Handler.handleCallback(Handler.java:615)上
05-31 01:57:12.568:E/AndroidRuntime(8329):位于android.os.Handler.dispatchMessage(Handler.java:92)
05-31 01:57:12.568:E/AndroidRuntime(8329):在android.os.Looper.loop(Looper.java:137)
05-31 01:57:12.568:E/AndroidRuntime(8329):位于android.app.ActivityThread.main(ActivityThread.java:4745)
05-31 01:57:12.568:E/AndroidRuntime(8329):位于java.lang.reflect.Method.Invokenactive(本机方法)
05-31 01:57:12.568:E/AndroidRuntime(8329):位于java.lang.reflect.Method.invoke(Method.java:511)
05-31 01:57:12.568:E/AndroidRuntime(8329):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-31 01:57:12.568:E/AndroidRuntime(8329):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
您好,通过查看您的代码,我想这是@Wezelkrozum所说的代码中的mContext问题。作为一个解决方案,我可以说您的mContext指向Null。如果您使用mContext在任何地方初始化上下文,那么只需执行此操作。mContext=yourContext(Obj)。
我认为这会起作用…鉴于您发布的stacktrace,问题似乎出现在警报对话框的init中,如此行所述:
E/AndroidRuntime(8329): at android.app.AlertDialog.<init>(AlertDialog.java:98)
解决问题的最合理方法是定义AsyncTask(我假设它是一个异步任务,因为它定义了onPreExecute方法),如下所示:
public class MyAsyncTask extends AsyncTask<String, Void, String> {
private Context mContext;
public MyAsyncTask(Context ctx) {
this.mContext = ctx;
}
@Override
protected String doInBackground(String... params) {
String returnedValue;
//your long-time-taking code goes here.
return returnedValue;
}
@Override
protected void onPostExecute(String result) {
//do something with the returned value and eventually hide the progress bar
pb.setVisibility(View.GONE);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(mContext);
pd.setMessage(ActivityStrings.PROGRESS_MESSAGE_PD);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setCancelable(false);
pd.setCanceledOnTouchOutside(false);
if (!((Activity) mContext).isFinishing()) {
pd.show();
}
}
@Override
protected void onProgressUpdate(Void... values) {
// do something while the task is running, such updating your progress bar..
}
}
new MyAsyncTask(this).execute(STRING_PARAMETER);
这样,您将在异步任务中有一个适当的上下文来初始化进度对话框
这里有几点:
希望这有帮助 这是一个简单的逻辑,只需使用This.mContext初始化上下文即可。这将完成…您可以通过检查crush line uses object ref是否为null来修复NullPointException 然后在调用对象ref之前尝试初始化它
这种情况类似于mContext发布日志猫。查看代码,唯一可能抛出错误的对象是mContext。它可能还没有初始化。什么是
mContext
,您的初始化在哪里?请检查LoginScreen.java中的第138行和第104行。在那一行代码中,它的值为null。第72行是什么,?
new MyAsyncTask(this).execute(STRING_PARAMETER);
mContext = MainActivity.this; // <- your context instance.
pd = new ProgressDialog(mContext);