【问题标题】:NPE whenever I want to run Intent from my class [duplicate]每当我想从我的班级运行 Intent 时,NPE [重复]
【发布时间】:2020-06-12 07:39:46
【问题描述】:

我是 Android 应用开发的初学者。我已经完成了一些 Udemy 课程,但后来我意识到 Android Docs 实际上可能更适合为应用程序开发打下良好的基础。我现在正在尝试构建自己的应用程序,但遇到了这个问题。

我的班级

public class deleteInfluencer extends AppCompatActivity {

private Repository instanceOfRepository;

public static final int EDIT_BLOGGER_ACTIVITY_REQUEST_CODE = 1;

deleteInfluencer(Application application) {
    super();
    instanceOfRepository = new Repository(application);
}

void callDeleteInfluencer(int id) {
    instanceOfRepository.deleteInfluencerCalledFromRepository(id);
}

void callUpdateInfluencer() {
    Intent intent = new Intent(this, EditBloggerActivity.class);
    startActivityForResult(intent, EDIT_BLOGGER_ACTIVITY_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == EDIT_BLOGGER_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
        int id = 0;
        Tables tables = new Tables(
                id, // Blogger ID
                data.getStringExtra(EditBloggerActivity.EXTRA_EDIT_REPLY_NAME),
                data.getStringExtra(EditBloggerActivity.EXTRA_EDIT_REPLY_ADDRESS),
                data.getStringExtra(EditBloggerActivity.EXTRA_EDIT_REPLY_MOBILE_NUMBER),
                data.getStringExtra(EditBloggerActivity.EXTRA_EDIT_REPLY_FB),
                data.getStringExtra(EditBloggerActivity.EXTRA_EDIT_REPLY_IG),
                data.getStringExtra(EditBloggerActivity.EXTRA_EDIT_REPLY_EMAIL));
        instanceOfRepository.updateInfluencerCalledFromRepository(tables);
    } else {
        Toast.makeText(this, "Save Failed! fill out all fields", Toast.LENGTH_LONG).show();

    }
}
}

LOGCAT

2020-02-28 16:10:06.071 4258-4258/com.kurtsample.digitalcirclesprototype E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kurtsample.digitalcirclesprototype, PID: 4258
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:142)
    at android.content.ComponentName.<init>(ComponentName.java:130)
    at android.content.Intent.<init>(Intent.java:6082)
    at com.kurtsample.digitalcirclesprototype.deleteInfluencer.callUpdateInfluencer(deleteInfluencer.java:31)
    at com.kurtsample.digitalcirclesprototype.Adapter$2.onClick(Adapter.java:95)
    at android.view.View.performClick(View.java:6597)
    at android.view.View.performClickInternal(View.java:6574)
    at android.view.View.access$3100(View.java:778)
    at android.view.View$PerformClick.run(View.java:25885)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

【问题讨论】:

标签: java android nullpointerexception


【解决方案1】:

Intent intent = new Intent(this, EditBloggerActivity.class); 中的this 替换为deleteInfluencer.this。所以你会有Intent intent = new Intent(deleteInfluencer.this, EditBloggerActivity.class);

另外,还有几点需要注意:

  1. 活动类不应有构造函数。如果你想要什么 要充当构造函数,您可以使用生命周期方法。
  2. 您的类名应以大写字母开头,并带有 单词“活动”,因此deleteInfluencer 应该 是DeleteInfluencerActivity

【讨论】:

  • 我实际上希望这个类只包含我需要能够更新我的数据库中的数据的方法。我从来没有打算让它成为一个完整的活动。如果这个类已经被认为是一个活动,有没有办法把它变成我想要的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2019-07-28
  • 2014-04-09
  • 1970-01-01
  • 2021-06-20
  • 2015-01-30
相关资源
最近更新 更多