Страница 1 из 1

Ошибка при вызове startActivity()

Добавлено: 06 окт 2015, 13:44
evgenSorokin
Привет всем.

Недавно начал разработку приложений. Возникла одна проблема с вызовами Активити.
У меня есть MainActivity.java и ConnectionToServer.java. Есть форма входа. Поля Логин и Пароль, и кнопка Войти.
Вводим данные, нажимаем Войти и вызывается функция из MainActivity.java

Код: Выделить всё

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button_login:
                if (etEmail.getText().toString().trim().length() == 0) {
                    Tools._toast(R.string.input_email_text_required, context);
                } else {

                    String email = etEmail.getText().toString();
                    String password = etPassword.getText().toString();

                    if (etEmail.getText().toString().trim().length() == 0) {
                        Tools._toast(R.string.input_email_text_required, context);
                    } else {
                        try {
                            toServer.login(email, password, MainActivity.this);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
                break;
        }
    }
toServer.login() - у меня в ConnectionToServer.java. Туда пробрасываю MainActivity.this, как Context. Потом передаю ей в AsyncTask(). requestServer rS = new requestServer(context);
После выполнения запроса на сервак запускается

Код: Выделить всё

@Override
        protected void onPostExecute(JSONObject jsonObject) {
            super.onPostExecute(jsonObject);
            tools._progressDialogDismiss();

            switch (doFunc){
                case "login":
                    MainActivity mA = new MainActivity();
                    try {
                        mA.doAfterLogin(jsonObject, mContext);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }

и должна вызваться функция mA.doAfterLogin(jsonObject, mContext); которая у меня в MainActivity.java

Код: Выделить всё

public void doAfterLogin(JSONObject response, Context mContext) throws JSONException {
        if(Objects.equals(response.getString("code"), "200")){
            goToAccountActivity(response, mContext);
        } else {
            String message = response.getString("message");
            Tools._toastString(message, mContext);
        }
    }
Она там парсит ответ и если всё гуд, то вызывается функцию перехода на другой Активити

Код: Выделить всё

public void goToAccountActivity(JSONObject res, Context mContext){
        startActivity(new Intent(mContext, AccountActivity.class));

            transitionType = MainActivity.TransitionType.Diagonal;
            overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
    }
И вот тут возникает ошибка.
FATAL EXCEPTION: main
Process: com.ergonized.citylike_native, PID: 17761
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:132)
at android.content.ComponentName.<init>(ComponentName.java:77)
Хотя если эту же функцию вызвать просто с кнопки, то она вызывается. А вот через ConnectionToServer.java, нет.

Помогите плиз. Спасибо

Re: Ошибка при вызове startActivity()

Добавлено: 06 окт 2015, 16:01
Mikhail_dev
MainActivity mA = new MainActivity();
Хех, скажите. а кто так активити то создаёт? Вы думаете создав их таким образом, она правильно проинициализируется? Не конечно же! Ведь в goToAccountActivity вы вызываете метод startActivity, и у кого? Вызываете получается его у mA объекта, в котором контекст равен Null.
Если у вас в goToAccountActivity приходит контекст той активити, которую вы изначально передали, то почему от её имени и не вызовете новую активити?
[syntax=java5]
public void goToAccountActivity(JSONObject res, Context mContext){
mContext.startActivity(new Intent(mContext, AccountActivity.class));

transitionType = MainActivity.TransitionType.Diagonal;
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
}
[/syntax]