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;
}
}