Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/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 此代码段上的Null指针执行选项_Android - Fatal编程技术网

Android 此代码段上的Null指针执行选项

Android 此代码段上的Null指针执行选项,android,Android,嗨,我是android新手,我遇到了空指针异常。有人能告诉我这个代码的问题吗 代码如下 @Override protected void onPreExecute() { super.onPreExecute(); pd = new ProgressDialog(mContext); //pd.setTitle("Sending Request !"); pd.setMessage(ActivityStrings.PROGRESS_MESSAGE_

嗨,我是android新手,我遇到了空指针异常。有人能告诉我这个代码的问题吗 代码如下

    @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);
这样,您将在异步任务中有一个适当的上下文来初始化进度对话框

这里有几点:

  • 上面的asynctask示例获取一个字符串作为参数和 返回一个字符串作为结果(您可以轻松重写此行为 根据您的需要)
  • 您可以将活动传递给asynctask,以便定义某种回调来将控制权返还给活动(例如,更新视图)
  • 当您旋转设备时,操作系统会重新创建活动,因此您的asynctask将无法执行任何回调操作(请改用加载程序)

  • 希望这有帮助

    这是一个简单的逻辑,只需使用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);