Java 尝试在AsyncTask中创建意图时出现Null错误

Java 尝试在AsyncTask中创建意图时出现Null错误,java,android,amazon-web-services,amazon-dynamodb,Java,Android,Amazon Web Services,Amazon Dynamodb,如果这是一个愚蠢的问题,我表示歉意,但在AsynTask将用户从我的AWS数据库中拉出来之后,我正试图创建AsynTask中下一个活动的意图。注意,这个类是HomeActivity,下一个是GroupActivity。下面是运行AsynTask的按钮: Button groupPageBtm = findViewById(R.id.groupPage); groupPageBtm.setOnClickListener(new View.OnClickListener() {

如果这是一个愚蠢的问题,我表示歉意,但在AsynTask将用户从我的AWS数据库中拉出来之后,我正试图创建AsynTask中下一个活动的意图。注意,这个类是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());

     }
}
class LoadGroupUser扩展异步任务{
私人发电机;
活动;
公共LoadGroupUser(活动权限){
这个。活动=活动;
}
Intent-groupLoadIntent=新的Intent(活动,GroupActivity.class);
@凌驾
受保护的GroupDoInBackground(字符串…groupPresidentGroups){
AmazonDynamoDBClient dynamoDBClient=新的AmazonDynamoDBClient(AWSMobileClient.getInstance().getCredentialsProvider());
this.dynamoDBMapper=dynamoDBMapper.builder()
.dynamodb客户端(dynamodb客户端)
.AWS配置(AWSMobileClient.getInstance().getConfiguration())
.build();
GroupDO groupPresDO=dynamoDBMapper.load(GroupDO.class,grouppresentgroups[0]);
Log.i(“loadedPresident:,groupPresDO.getGroupId().toString());
返回null;
}
@凌驾
受保护的void onPostExecute(GroupDO-GroupDO){
super.onPostExecute(groupDO);
groupLoadIntent.putExtra(“groupPresident”,groupDO.getGroupPresident().toString());
活动。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)
-12 17:02:59.424 10503-10503/com.ronone.securesender E/AndroidRuntime:致命异常:main
进程:com.ronone.securesender,PID:10503
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String android.content.Context.getPackageName()”
位于android.content.ComponentName。(ComponentName.java:130)
位于android.content.Intent.(Intent.java:5780)
在com.ronone.securesender.LoadGroupUser.(HomeActivity.java:188)
在com.ronone.securesender.HomeActivity$1.onClick(HomeActivity.java:77)
在android.view.view.performClick上(view.java:6294)
在android.view.view$PerformClick.run(view.java:24770)
位于android.os.Handler.handleCallback(Handler.java:790)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6494)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
问题在于:

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活动泄漏”。

BTW,“m”命名约定是您的类成员获取“m”,而不是您的方法参数。因此,构造函数中的赋值看起来像
mActivity=activity
。顺便问一下,能否添加AWSMobileClient.getInstance().initialize(this.execute());在尝试使用AWSMobileClient获取配置和凭据提供程序之前?这已成功,谢谢!将调查异步任务活动泄漏。