Исключение нулевого указателя для асинхронной задачи - PullRequest
2 голосов
/ 28 июня 2011

Я имею дело со своими веб-сервисами, и у меня возникла странная проблема, и я не смог ее решить, так как я новичок в разработке для Android.Я получаю исключение нулевого указателя при показе тоста в методе onPostExecute() асинхронной задачи.кто-нибудь, пожалуйста, помогите мне исправить это

if (result.booleanValue()) // here at this line I am getting the error in logcat//

Заранее спасибо ....!

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ///////////male female buttons code/////////////
    Button regmalebtn = (Button) findViewById(R.id.regmalebtn); 
    regmalebtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            gender="M";
            System.out.println("gender value after  male button click ="+gender);
            Log.v(TAG,"gender value on  male button click ="+gender );
        }
    });
    Button regfemalebtn = (Button)findViewById(R.id.regfemalebtn);
    regfemalebtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            gender ="F";
            // System.out.println("gender value on  female button click ="+gender);
            Log.v(TAG,"gender value on  female button click ="+gender );
        }
    });

    ////////////male female button code will ends here/////////////

    Button signin = (Button) findViewById(R.id.regsubmitbtn);
    signin.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            new RegisterTask().execute();
        };
    });
}


private class RegisterTask extends AsyncTask<Void, Void, Boolean> {
    private final ProgressDialog dialog = new ProgressDialog(Register.this);

    protected void onPreExecute() {
        this.dialog.setMessage("Registering...");
        this.dialog.show();
    }


    //  @SuppressWarnings("unused")
    protected Boolean doInBackground(final Void unused) {
        return this.register(); //don't interact with the ui!
    }

    private Boolean register() {
        ************some code for webservices************
    }

    return null;

}

protected void onPostExecute(final Boolean result) {
    if (this.dialog.isShowing()) {
        this.dialog.dismiss();
    }
    if (result.booleanValue()) {
        // show register success dialog
        // I m getting the error at above line

        Toast.makeText(Register.this, "Registerd", Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(Register.this, "Try Again", Toast.LENGTH_SHORT).show();
    }
}

@Override
protected Boolean doInBackground(Void... params) {
    // TODO Auto-generated method stub
    return register();
}


}   
}

Эти ошибки logcat

06-28 16:55:56.685: WARN/dalvikvm(708): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-28 16:55:56.695: ERROR/AndroidRuntime(708): FATAL EXCEPTION: main
06-28 16:55:56.695: ERROR/AndroidRuntime(708): java.lang.NullPointerException
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at com.soap.Register$RegisterTask.onPostExecute(Register.java:193)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at com.soap.Register$RegisterTask.onPostExecute(Register.java:1)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at android.os.AsyncTask.finish(AsyncTask.java:417)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at android.os.Looper.loop(Looper.java:123)
06-28 16:55:56.695: ERROR/AndroidRuntime(708):     at android.app.ActivityThread.main(ActivityThread.java:4627)

Ответы [ 5 ]

3 голосов
/ 28 июня 2011

Вы явно возвращаете null из метода register.Либо верните что-то, что не является нулевым, либо сделайте проверку на ноль перед вызовом result.booleanValue().

Вы можете сделать это так:

if (result == null) {

}
else if (result.booleanValue()) {

}
else {

}

Кстати, зачем вамвернуть логическое, а не логическое (примитивный тип, который не может быть нулевым).

0 голосов
/ 09 апреля 2014

Я избавился от той же проблемы Toast / Async / Nullpointe, запустив Toasts так:

Toast.makeText(getApplicationContext(), "Hello Toast!", Toast.LENGTH_SHORT).show();
0 голосов
/ 29 июня 2011

Я написал это

protected void onPostExecute(String unused) {
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);

            Toast.makeText(
                    myclassname.this,
                    "Downloading of " + FILENAME
                            + " complete.", Toast.LENGTH_LONG).show();
            refreshList();


        }

, и это работает для меня ..

см. Эту ссылку для более подробной информации
http://hi.baidu.com/hi_android/blog/item/fea149f90da7fdedfd037f56.html
http://www.screaming -penguin.com / node / 7746

0 голосов
/ 28 июня 2011

Попробуйте передать контекст в переменную.Или попробуйте Register.this.getApplicationContext() или BaseContext.Проверьте, является ли диалог пустым, передайте значения и создайте новый диалог в postExecute(), если это не совпадает с вашими требованиями:)

0 голосов
/ 28 июня 2011

Попробуйте использовать в качестве аргумента тоста название вашего Activity.class.Я думаю, что в вашем случае это Register.class вместо Register.this

...