Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;尝试对空对象引用调用虚方法;显示来自sqlite数据库的数据时_Java_Android_Database_Sqlite_Nullpointerexception - Fatal编程技术网

Java &引用;尝试对空对象引用调用虚方法;显示来自sqlite数据库的数据时

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.

我想从数据库中检索详细信息,并使用textview在选项卡式活动片段中打印它们。 但是,我得到的是空对象引用。关于我为什么会犯这种错误以及我应该做些什么来避免这种错误,有什么线索吗


这是我的片段(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())