java.lang.NullPointerException:尝试调用虚拟方法';。getPackageName()';关于空对象引用

java.lang.NullPointerException:尝试调用虚拟方法';。getPackageName()';关于空对象引用,java,android,Java,Android,我试图从数据库中获取列表,突然出现了这个错误 错误来自于此: TinyDB tinydb = new TinyDB(MyApp.getContext()); SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 这是MyApp的类 public class MyApp extends Application { private static MyApp instance; public static MyApp getInst

我试图从数据库中获取列表,突然出现了这个错误

错误来自于此:

TinyDB tinydb = new TinyDB(MyApp.getContext());

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
这是MyApp的类

public class MyApp extends Application {
 private static MyApp instance;

 public static MyApp getInstance() {
    return instance;
 }

 public static Context getContext(){
    return instance;
    // or return instance.getApplicationContext();
 }

 @Override
 public void onCreate() {
    instance = this;
    super.onCreate();
 }
}
我现在不知道如何解决这个问题

编辑:

进程:com.example.pangelyn,PID:7750 java.lang.RuntimeException:无法实例化活动组件信息{com.example.pangelyn/com.example.pangelyn.SwipeLeft}: java.lang.NullPointerException:尝试调用虚拟方法 空值上的“java.lang.String android.content.Context.getPackageName()” 对象引用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679)上 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 位于android.app.ActivityThread.-wrap11(未知来源:0) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)上 位于android.os.Handler.dispatchMessage(Handler.java:106) 位于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) 原因:java.lang.NullPointerException:尝试调用虚拟方法“java.lang.String” 空对象引用上的android.content.Context.getPackageName() 位于android.content.ContextWrapper.getPackageName(ContextWrapper.java:135) 位于android.app.Activity.getLocalClassName(Activity.java:5854) 位于android.app.Activity.getPreferences(Activity.java:5897) 位于com.example.pangelyn.SwipeLeft.(SwipeLeft.java:28) 位于java.lang.Class.newInstance(本机方法) 位于android.app.Instrumentation.newActivity(Instrumentation.java:1174) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)上 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 位于android.app.ActivityThread.-wrap11(未知来源:0) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)上 位于android.os.Handler.dispatchMessage(Handler.java:106) 位于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)

编辑2:

public class SwipeLeft extends AppCompatActivity {

float x1,x2,y1,y2;

List<GroupModel> lisSiswaModel = new ArrayList<>();

TinyDB tinydb = new TinyDB(MyApp.getContext());

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_groups);

    RecyclerView recyclerView = findViewById(R.id.recyclerView_group);

    Editor prefsEditor = mPrefs.edit();
    Gson gson = new Gson();
    GroupModel groupModel1 = new GroupModel();
    groupModel1.setName("School");
    String json1 = gson.toJson(groupModel1);
    prefsEditor.putString("groups", json1);
    prefsEditor.commit();

    List<String> json2 = tinydb.getListString("groups");

    for (String string : json2) {
        GroupModel groupModel2 = gson.fromJson(string, GroupModel.class);
        lisSiswaModel.add(groupModel2);
    }

    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    GroupAdapter adapter = new GroupAdapter(this, lisSiswaModel);
    recyclerView.setAdapter(adapter);
}

public boolean onTouchEvent(MotionEvent touchEvent){
    switch(touchEvent.getAction()){
        case MotionEvent.ACTION_DOWN:
            x1 = touchEvent.getX();
            y1 = touchEvent.getY();
            break;
        case MotionEvent.ACTION_UP:
            x2 = touchEvent.getX();
            y2 = touchEvent.getY();
            if(x1 > x2 + 250){
                Intent i = new Intent(SwipeLeft.this, MainActivity.class);
                startActivity(i);
                overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
            }
            break;
    }
    return false;
}
}
公共类SwipeLeft扩展AppCompative活动{
浮球x1、x2、y1、y2;
List lisSiswaModel=new ArrayList();
TinyDB TinyDB=新的TinyDB(MyApp.getContext());
SharedReferences mPrefs=getPreferences(模式\私有);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_组);
RecyclerView RecyclerView=findViewById(R.id.RecyclerView\U组);
编辑器prefsEditor=mPrefs.edit();
Gson Gson=新的Gson();
GroupModel groupModel1=新的GroupModel();
groupModel1.setName(“学校”);
字符串json1=gson.toJson(groupModel1);
putString(“组”,json1);
提交();
List json2=tinydb.getListString(“组”);
for(字符串:json2){
GroupModel groupModel2=gson.fromJson(字符串,GroupModel.class);
lisSiswaModel.add(groupModel2);
}
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
GroupAdapter=新的GroupAdapter(此为lisSiswaModel);
recyclerView.setAdapter(适配器);
}
公共布尔onTouchEvent(MotionEvent touchEvent){
开关(touchEvent.getAction()){
case MotionEvent.ACTION\u DOWN:
x1=touchEvent.getX();
y1=touchEvent.getY();
打破
case MotionEvent.ACTION\u UP:
x2=touchEvent.getX();
y2=touchEvent.getY();
如果(x1>x2+250){
意图i=新意图(SwipeLeft.this,MainActivity.class);
星触觉(i);
覆盖转换(R.anim.slide\u in\u right,R.anim.slide\u out\u left);
}
打破
}
返回false;
}
}

修复方法是将其移动到活动的onCreate中(如它所说,上下文为null):

公共类SwipeLeft扩展AppCompative活动{
浮球x1、x2、y1、y2;
List lisSiswaModel=new ArrayList();
TinyDB TinyDB=新的TinyDB(MyApp.getContext());
共享参考文献;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_组);
mPrefs=getPreferences(模式\私有);
…更多代码
}
…更多代码
}

我猜是因为这个原因导致崩溃的
TinyDB TinyDB=newtinydb(MyApp.getContext())
onCreate()中初始化对象。


不要将
mContext=instance
放在
super.onCreate()
?你的错误和你的表现毫无意义。这能回答你的问题吗?这能回答你的问题吗?你能发布这个类吗?
com.example.pangelyn.SwipeLeft
@mahabububulhasan不,那不管用,嗯,我认为那不管用。它仍然抛出相同的异常。好吧,我在这两种情况下都测试了它,这是有效的。不确定你是否有其他地方也这样做。我是从SharePrefs的角度告诉你的。只要试着删除mPrefs行之后的所有代码,看看它是否有效。如果它能工作——在我的例子中,工作没有问题——你可以从那里构建它,看看它是否在其他地方崩溃
public class SwipeLeft extends AppCompatActivity {
    float x1,x2,y1,y2;

    List<GroupModel> lisSiswaModel = new ArrayList<>();

    TinyDB tinydb = new TinyDB(MyApp.getContext());

    SharedPreferences mPrefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_groups);
        mPrefs = getPreferences(MODE_PRIVATE);
        ...more code
    }
    ...more code
}
public class SwipeLeft extends AppCompatActivity {

float x1,x2,y1,y2;

List<GroupModel> lisSiswaModel = new ArrayList<>();

TinyDB tinydb;

SharedPreferences mPrefs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_groups);
    tinydb = new TinyDB(MyApp.getContext());
    mPrefs = getPreferences(MODE_PRIVATE);

public class MyApp extends Application {

    private static MyApp mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }

    public static MyApp getContext() {
        return mContext;
    }
}