Приложение падает при прохождении Intent - PullRequest
0 голосов
/ 28 июня 2018

У меня есть пользовательское диалоговое окно, которое просит пользователя ввести OTP. Затем я выполняю нормальную работу OTP-процесса, проверяя его правильность и т. Д.

Теперь, когда я закончу с этим, я хочу открыть следующее действие, которое я не могу открыть.

Мой код для диалогового окна Custom:

public void showOTPDialog(Activity activity, String otp) {

    this.activity = activity;
    this.otp = otp;

    dialog = new Dialog(activity);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(true);
    dialog.setContentView(R.layout.verify_otp);

    final EditText etOtp = dialog.findViewById(R.id.et_otp);
    Button verify = dialog.findViewById(R.id.bt_go);
    Button resend = dialog.findViewById(R.id.bt_resend);

    verify.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // verify if the otp entered was correct
        }
    });

    resend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //send new otp
        }
    });

    dialog.show();
    Window window = dialog.getWindow();
    if (window != null) {
        window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    }

}

private class insertOTP extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(activity);
        pDialog.setMessage("Kindly wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected String doInBackground(Void... params) {

        try {
            // RPS for inserting few things
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }

    @Override
    protected void onPostExecute(String response) {
        super.onPostExecute(response);
        pDialog.dismiss();

        if (response.equals("success")) {
            Intent intent = new Intent(activity, SecondActivity.class);
            intent.putExtra("class","1");
            startActivity(intent);
        } else {
            Toast.makeText(activity, "This user already exists...", Toast.LENGTH_SHORT).show();
        }
    }
}

Я получаю сообщение об ошибке, когда пытаюсь дать намерение и запустить SecondActivity. Ошибка:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
    at android.app.Activity.startActivityForResult(Activity.java:3918)
    at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
    at android.app.Activity.startActivityForResult(Activity.java:3877)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
    at android.app.Activity.startActivity(Activity.java:4200)
    at android.app.Activity.startActivity(Activity.java:4168)
    at com.globaltradingcompany.bhhopu.AuthenticateActivity$insertUser.onPostExecute(AuthenticateActivity.java:128)
    at com.globaltradingcompany.bhhopu.AuthenticateActivity$insertUser.onPostExecute(AuthenticateActivity.java:82)
    at android.os.AsyncTask.finish(AsyncTask.java:651)
    at android.os.AsyncTask.-wrap1(AsyncTask.java)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Я попытался добавить AuthenticationActivity.this, getApplicationContext (), getContext () внутри первого аргумента Intent. Кажется, никто не работает.

Хотелось бы получить небольшую помощь. Дайте мне знать, если вам нужно что-нибудь еще

Ответы [ 2 ]

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

Я нашел решение. Я сообщал о намерении базового действия, но начинал его с текущего действия, которое вызывало ошибку.

Решение:

Intent intent = new Intent(activity, SecondActivity.class);
        intent.putExtra("class","1");
        activity.startActivity(intent);
0 голосов
/ 28 июня 2018

Вы можете попробовать этот подход, чтобы вызвать второе действие из асинхронной задачи
При инициализации объекта asynctask передайте текущую ссылку на класс в качестве параметра

private class insertOTP extends AsyncTask<Void, Void, String> {

private Activity activity;
private ProgressDialog pDialog;

   public insertOTP(Activity activity) {
      this.activity = activity;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(activity);
        pDialog.setMessage("Kindly wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected String doInBackground(Void... params) {

        try {
            // RPS for inserting few things
        } catch (Exception e) {
            e.printStackTrace();
        }

        return response;
    }

    @Override
    protected void onPostExecute(String response) {
        super.onPostExecute(response);
        pDialog.dismiss();

        if (response.equals("success")) {
            Intent intent = new Intent(activity, SecondActivity.class);
            intent.putExtra("class","1");
            activity.startActivity(intent);
        } else {
            Toast.makeText(activity, "This user already exists...", Toast.LENGTH_SHORT).show();
        }
    }
}
...