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

时间:2018-06-12 21:18:01

标签: java android amazon-web-services amazon-dynamodb

道歉,如果这是一个愚蠢的问题,但我试图在从我的AWS数据库中提取用户后,为AsynTask中的下一个活动创建一个Intent。请注意,此类是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 :(得分:0)

问题在于:

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中对其进行强有力的引用,从而潜在地泄露您的活动。那是另一个话题。在此站点搜索&#34; AsyncTask活动泄漏。&#34;