Null Ошибка при попытке создать намерение в AsyncTask - PullRequest
0 голосов
/ 13 июня 2018

Прошу прощения, если это глупый вопрос, но я пытаюсь создать Намерение для следующего действия в AsynTask после того, как оно вытянуло пользователя из моей базы данных AWS.Обратите внимание, что этот класс - HomeActivity, а следующий - GroupActivity.Ниже у меня есть кнопка, которая будет запускать AsynTask:

Button groupPageBtm = findViewById(R.id.groupPage);
        groupPageBtm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoadGroupUser loadGroupUser = new LoadGroupUser(HomeActivity.this);
                loadGroupUser.execute(makeUserIDString.uniqueIDCreater(userProfile));
            }
        });

Вот мой подкласс AsynTask:

class LoadGroupUser extends AsyncTask<String, Void, GroupDO>{


    private DynamoDBMapper dynamoDBMapper;
    Activity activity;

    public LoadGroupUser(Activity mActivity){
        this.activity = mActivity;
    }

    Intent groupLoadIntent = new Intent(activity, GroupActivity.class);

    @Override
    protected GroupDO doInBackground(String... groupPresidentGroups) {
        AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(AWSMobileClient.getInstance().getCredentialsProvider());
        this.dynamoDBMapper = DynamoDBMapper.builder()
                .dynamoDBClient(dynamoDBClient)
                .awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
                .build();

        GroupDO groupPresDO = dynamoDBMapper.load(GroupDO.class, groupPresidentGroups[0]);
        Log.i("loadedPresident: ", groupPresDO.getGroupId().toString());
        return null;
    }

    @Override
    protected void onPostExecute(GroupDO groupDO) {
        super.onPostExecute(groupDO);

        groupLoadIntent.putExtra("groupPresident", groupDO.getGroupPresident().toString());
        activity.startActivity(groupLoadIntent);
        Log.i("groupPresident", groupDO.getGroupPresident().toString());

     }
}

Сообщение об ошибке:

-12 17:02:59.424 10503-10503/com.ronone.securesender E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.ronone.securesender, PID: 10503
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
        at android.content.ComponentName.<init>(ComponentName.java:130)
        at android.content.Intent.<init>(Intent.java:5780)
        at com.ronone.securesender.LoadGroupUser.<init>(HomeActivity.java:188)
        at com.ronone.securesender.HomeActivity$1.onClick(HomeActivity.java:77)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

1 Ответ

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

Проблема здесь:

public LoadGroupUser(Activity mActivity){
    this.activity = mActivity;
}

Intent groupLoadIntent = new Intent(activity, GroupActivity.class);

Инициализатор поля запускается перед конструктором, поэтому activity по-прежнему равен нулю.Сделайте это вместо этого:

Intent groupLoadIntent;

public LoadGroupUser(Activity mActivity){
    this.activity = mActivity;
    groupLoadIntent = new Intent(activity, GroupActivity.class);
}

Но учтите, что вы потенциально теряете свою активность, имея сильную ссылку на нее в AsyncTask.Это совсем другая тема.Поиск на этом сайте для "утечки активности AsyncTask."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...