Java &引用;尝试对空对象引用调用虚方法;显示来自sqlite数据库的数据时
我想从数据库中检索详细信息,并使用textview在选项卡式活动片段中打印它们。 但是,我得到的是空对象引用。关于我为什么会犯这种错误以及我应该做些什么来避免这种错误,有什么线索吗Java &引用;尝试对空对象引用调用虚方法;显示来自sqlite数据库的数据时,java,android,database,sqlite,nullpointerexception,Java,Android,Database,Sqlite,Nullpointerexception,我想从数据库中检索详细信息,并使用textview在选项卡式活动片段中打印它们。 但是,我得到的是空对象引用。关于我为什么会犯这种错误以及我应该做些什么来避免这种错误,有什么线索吗 这是我的片段(fragment_home_left.class),我必须在其中显示数据库中的记录 package com.rishabh.admin.bucomp; import android.database.Cursor; import android.os.Bundle; import android.
这是我的片段(fragment_home_left.class),我必须在其中显示数据库中的记录
package com.rishabh.admin.bucomp;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class fragment_home_left extends android.support.v4.app.Fragment implements View.OnClickListener {
Login_Signup_DB_adapter db_adapter;
String TAG = "FRAGMENT_HOME_LEFT";
//Button addGroup ,addMember;
//EditText new_group_edit_text;
Button display_users;
TextView display_box;
String details_recieved;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main_activity_home_left, container, false);
//addGroup = (Button) view.findViewById(R.id.button_add_Group);
display_users = (Button)view.findViewById(R.id.button_display_users);
//addMember = (Button) view.findViewById(R.id.button_display_users);
//new_group_edit_text = (EditText) view.findViewById(R.id.editText_fragment_left);
display_box = (TextView) view.findViewById(R.id.editText_displayBox);
//addMember.setOnClickListener(this);
display_users.setOnClickListener(this);
//addGroup.setOnClickListener(this);
//To display the records of all the users registered within the database
//Display_user_data();
return view;
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.button_display_users)
{
//details_recieved = new_group_edit_text.getText().toString().trim();
//Toast.makeText(getActivity(),"Member added "+details_recieved,Toast.LENGTH_LONG).show();
Log.i(TAG, "onClick: Display users button clicked, calling display function");
Fetch_user_data();
}else{
Log.i(TAG, "onClick: NO ID BUTTON");
}
}
private void Fetch_user_data() {
Log.i(TAG, "Fetch_user_data: CALLING FETCH USER DATA METHOD");
Cursor cursor = db_adapter.getAll_users();
Log.i(TAG, "Fetch_user_data: CURSOR RECIEVED SOMETHING");
Display_user_data(cursor);
}
private void Display_user_data(Cursor cursor) {
Log.i(TAG, "Display_user_data: CALLED DISPLAY_USER_DATA");
String message = "";
if(cursor!= null && cursor.getCount() > 0){
Log.i(TAG, "Display_user_data: DO WHILE LOOP WILL BE EXECUTED");
cursor.moveToFirst();
do{
int user_id;
String user_name,user_email,user_password;
user_id = cursor.getInt(db_adapter.USER_COL_ROW_ID);
user_name = cursor.getString(db_adapter.USER_COL_NAME);
user_email = cursor.getString(db_adapter.USER_COL_EMAIL);
user_password = cursor.getString(db_adapter.USER_COL_PASSWORD);
message = message+"id="+user_id+","+"name="+user_name+","+"email="+user_email
+","+"pass="+user_password+"\n";
Log.i(TAG, "Display_user_data: NEW MESSAGE STRING APPENDED");
}while(cursor.moveToNext());
cursor.close();
Log.i(TAG, "Display_user_data: CURSOR IS CLOSED");
}
Log.i(TAG, "Display_user_data: CALLING SET_DATA_EDIT_TEXT METHOD");
set_data_in_editText(message);
}
private void set_data_in_editText(String message) {
Log.i(TAG, "set_data_in_editText: NOW SETTING MESSAGE TO TEXT VIEW");
display_box.setText(message);
}
}
与上述片段链接的xml布局(fragment\u main\u activity\u home\u left.xml)
这是我单击“显示用户”按钮时遇到的日志错误
05-2008:37:20.4131818-1818/?I/LOGIN:checkInDataBase:存在ID为1的登录用户
05-20 08:37:25.106 594-938/? I/WindowManager:销毁表面(name=com.rishabh.admin.bucomp/com.rishabh.admin.bucomp.main活动\u登录)由com.android.server.wm.WindowsStateAnimator.destroySurface调用:2014 com.android.server.wm.WindowsStateAnimator.destroySurface锁定:881 com.android.server.wm.WindowState.destroyOrSaveSurface:2073 com.android.server.wm.WindowManagerService.tryStartExitingAnimation:3017 com.android.server.wm.WindowManagerService.relayoutWindow:2897com.android.server.wm.Session.relayat:215 android.view.IWindowSession$Stub.onTransact:286 com.android.server.wm.Session.onTransact:136
05-20 08:37:33.637 1818-1818/? E/AndroidRuntime:致命异常:主
进程:com.rishabh.admin.bucomp,PID:1818
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.database.Cursor com.rishabh.admin.bucomp.Login\u Signup\u DB\u adapter.getAll\u users()”
在com.rishabh.admin.bucomp.fragment\u home\u left.Fetch\u user\u数据(fragment\u home\u left.java:72)
位于com.rishabh.admin.bucomp.fragment\u home\u left.onClick(fragment\u home\u left.java:62)
在android.view.view.performClick上(view.java:5609)
在android.view.view$PerformClick.run(view.java:22259)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
您尚未初始化db\u适配器
这就是为什么db\u适配器
为null并且您正在调用Login\u Signup\u db\u适配器
类的函数。因此,您需要在fragment\u home\u left
类的onCreateView
中这样初始化db\u适配器
db_adapter = new Login_Signup_DB_adapter(this);
您必须实例化适配器。尝试添加
db_adapter = new Login_Signup_DB_adapter(getContext())
在您的Fragment onCreate()方法中,我执行了此操作,但错误仍然存在致命异常:主进程:com.rishabh.admin.bucomp,PID:21432 java.lang.NullPointerException:尝试调用虚拟方法'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String,java.lang.String,java.lang.String,java.lang.String),在com.rishabh.admin.bucomp.Login\u Signup\u DB\u adapter.getAll\u用户(Login\u Signup\u DB\u adapter.java:312)有什么想法吗?@rishabhkalra在你的问题中输入你的logcat错误,这在评论中是不可理解的。我很抱歉,非常抱歉,我想告诉大家的是,现在我在数据库上遇到了相同的空指针异常query@rishabhkalra那是因为你没有在任何地方调用open\u database
来初始化db\u readable
和db\u writable
该死!!我没有……我有点傻!谢谢你指出这一点
05-20 08:37:20.413 1818-1818/? I/LOGIN: checkInDataBase: LOGIN USER EXISTS WITH ID :1
05-20 08:37:25.106 594-938/? I/WindowManager: Destroying surface Surface(name=com.rishabh.admin.bucomp/com.rishabh.admin.bucomp.MainActivity_Login) called by com.android.server.wm.WindowStateAnimator.destroySurface:2014 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.destroyOrSaveSurface:2073 com.android.server.wm.WindowManagerService.tryStartExitingAnimation:3017 com.android.server.wm.WindowManagerService.relayoutWindow:2897 com.android.server.wm.Session.relayout:215 android.view.IWindowSession$Stub.onTransact:286 com.android.server.wm.Session.onTransact:136
<LOG ERROR>
05-20 08:37:33.637 1818-1818/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rishabh.admin.bucomp, PID: 1818
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor com.rishabh.admin.bucomp.Login_Signup_DB_adapter.getAll_users()' on a null object reference
at com.rishabh.admin.bucomp.fragment_home_left.Fetch_user_data(fragment_home_left.java:72)
at com.rishabh.admin.bucomp.fragment_home_left.onClick(fragment_home_left.java:62)
at android.view.View.performClick(View.java:5609)
at android.view.View$PerformClick.run(View.java:22259)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
db_adapter = new Login_Signup_DB_adapter(this);
db_adapter = new Login_Signup_DB_adapter(getContext())