Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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 如何在Android中全局访问SQlite返回的数据?_Java_Android_Sqlite_Object_Getter Setter - Fatal编程技术网

Java 如何在Android中全局访问SQlite返回的数据?

Java 如何在Android中全局访问SQlite返回的数据?,java,android,sqlite,object,getter-setter,Java,Android,Sqlite,Object,Getter Setter,我在Android上编写sip应用程序。我有一些关于用户登录的信息。我想做那样的东西 具有用户设置的用户对象(存储在SQlite中) 从SQlite数据访问用户数据并存储在对象中 直接从对象使用用户数据,如(在UI活动中,片段…): 用户=新用户(); Log.i(“TAG”,user.sip\u id); 或 User user = new User(); Log.i("TAG", user.sip_id); Log.i(“TAG”,user.getSip_id()); //从表中获取用户数据

我在Android上编写sip应用程序。我有一些关于用户登录的信息。我想做那样的东西

  • 具有用户设置的用户对象(存储在SQlite中)
  • 从SQlite数据访问用户数据并存储在对象中
  • 直接从对象使用用户数据,如(在UI活动中,片段…):
  • 用户=新用户(); Log.i(“TAG”,user.sip\u id);

    User user = new User(); Log.i("TAG", user.sip_id); Log.i(“TAG”,user.getSip_id());
    //从表中获取用户数据
    公共HashMap getUserDetails(){
    HashMap用户=新建HashMap();
    String selectQuery=“选择*来自用户”;
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor Cursor=db.rawQuery(selectQuery,null);
    cursor.moveToFirst();
    if(cursor.getCount()>0){
    MainObj.User User=新的MainObj.User();
    user.setSip_id(cursor.getString(1));
    user.setAccount_id(cursor.getString(2));
    等等
    }
    cursor.close();
    db.close();
    //返回用户
    返回用户;
    }
    

    我不知道如何正确地使用谷歌,因为我已经搜索了大约3个小时。

    你的问题在于你的getUserDetails方法

    首先,创建一个名为user的HashMap变量。。。在if块中,您还创建了一个名为User的MainObj.User变量

    所以。。。那碰撞呢?在Java中,变量作用域是块。因此,在if块中创建的用户将在if块完成时自动删除,返回值为空HashMap

    您可以将该方法更改为以下内容:

    // get user data from table
    public HashMap<String, String> getUserDetails() {
        HashMap<String, String> user = new HashMap<String, String>();
        String selectQuery = "SELECT * FROM user";
    
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        cursor.moveToFirst();
    
        if (cursor.getCount() > 0) {
            MainObj.User user = new MainObj.User();
            user.setSip_id(cursor.getString(1));
            user.setAccount_id(cursor.getString(2));
            .... and so on
        }
    
        cursor.close();
        db.close();
    
        // return user
        return user;
    }
    

    只要像这样更改代码,您就可以随时随地访问数据

    // get user data from table
    public MainObj.User getUserDetails() {
        MainObj.User user = null;
        String selectQuery = "SELECT * FROM user";
    
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        cursor.moveToFirst();
    
        if (cursor.getCount() > 0) {
            user = new MainObj.User();
            user.setSip_id(cursor.getString(1));
            user.setAccount_id(cursor.getString(2));
            .... and so on
        }
    
        cursor.close();
        db.close();
    
        // return user or null if not data
        return user;
    }
    
    您可以通过如下方式访问实例来为用户obj设置数据

    import android.util.Log;
    
    public class User {
        private static final User instance = new User();
    
        public static User getInstance() {
            return instance;
        }
    
        private User() {
            super();
        }
    
        private int account_id;
        private String user_id;
        private String sip_id;
        private String username;
        private String fullname;
        private boolean active;
        private boolean status;
    
        public int getAccount_id() {
            return account_id;
        }
    
        public void setAccount_id(int account_id) {
            Log.e("myphone", account_id + "");
            this.account_id = account_id;
        }
    
        public String getUser_id() {
            return user_id;
        }
    
        public void setUser_id(String user_id) {
            this.user_id = user_id;
        }
    
        public String getSip_id() {
            return sip_id;
        }
    
        public void setSip_id(String sip_id) {
            this.sip_id = sip_id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getFullname() {
            return fullname;
        }
    
        public void setFullname(String fullname) {
            this.fullname = fullname;
        }
    
        public boolean isActive() {
            return active;
        }
    
        public void setActive(boolean active) {
            this.active = active;
        }
    
        public boolean isStatus() {
            return status;
        }
    
        public void setStatus(boolean status) {
            this.status = status;
        }
    
    }
    
    如果您在获得数据后需要数据,只需执行以下操作,例如:

    //get user data from table
    public void getUserDetails() {
     String selectQuery = "SELECT * FROM user";
    
     SQLiteDatabase db = this.getReadableDatabase();
     Cursor cursor = db.rawQuery(selectQuery, null);
     cursor.moveToFirst();
    
     if (cursor.getCount() > 0) {
         //If you want you can hold the reference in a User obj = User.getInstance(); just to write less code
         User.getInstance().setSip_id(cursor.getString(1));
         User.getInstance().setAccount_id(cursor.getString(2));
         .... and so on
     }
    
     cursor.close();
     db.close();
    }
    

    您可以返回用户详细信息列表。如果您需要从应用程序中的任何位置访问它,请将此列表放在应用程序类中。它维护一个全局应用程序状态。通过调用ChildApplication app=(ChildApplication)context.getApplicationContext(),可以扩展应用程序类并在应用程序中的任何位置使用该类

    公共列表getUSerDetails(){ List userDetails=new ArrayList(); String selectQuery=“选择*来自用户”; SQLiteDatabase db=this.getReadableDatabase(); Cursor Cursor=db.rawQuery(selectQuery,null); cursor.moveToFirst(); if(cursor.getCount()>0){ MainObj.User User=新的MainObj.User(); user.setSip_id(cursor.getString(1)); user.setAccount_id(cursor.getString(2)); 等等 userDetails.add(用户); } cursor.close(); db.close(); 返回用户详细信息; }
    import android.util.Log;
    
    public class User {
        private static final User instance = new User();
    
        public static User getInstance() {
            return instance;
        }
    
        private User() {
            super();
        }
    
        private int account_id;
        private String user_id;
        private String sip_id;
        private String username;
        private String fullname;
        private boolean active;
        private boolean status;
    
        public int getAccount_id() {
            return account_id;
        }
    
        public void setAccount_id(int account_id) {
            Log.e("myphone", account_id + "");
            this.account_id = account_id;
        }
    
        public String getUser_id() {
            return user_id;
        }
    
        public void setUser_id(String user_id) {
            this.user_id = user_id;
        }
    
        public String getSip_id() {
            return sip_id;
        }
    
        public void setSip_id(String sip_id) {
            this.sip_id = sip_id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getFullname() {
            return fullname;
        }
    
        public void setFullname(String fullname) {
            this.fullname = fullname;
        }
    
        public boolean isActive() {
            return active;
        }
    
        public void setActive(boolean active) {
            this.active = active;
        }
    
        public boolean isStatus() {
            return status;
        }
    
        public void setStatus(boolean status) {
            this.status = status;
        }
    
    }
    
    //get user data from table
    public void getUserDetails() {
     String selectQuery = "SELECT * FROM user";
    
     SQLiteDatabase db = this.getReadableDatabase();
     Cursor cursor = db.rawQuery(selectQuery, null);
     cursor.moveToFirst();
    
     if (cursor.getCount() > 0) {
         //If you want you can hold the reference in a User obj = User.getInstance(); just to write less code
         User.getInstance().setSip_id(cursor.getString(1));
         User.getInstance().setAccount_id(cursor.getString(2));
         .... and so on
     }
    
     cursor.close();
     db.close();
    }
    
    mEditText.setText(User.getInstance().getUsername());
    
    public List<MainObj.User> getUSerDetails(){
    
            List<MainObj.User> userDetails = new ArrayList<MainObj.User>();
            String selectQuery = "SELECT * FROM user";
    
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);
            cursor.moveToFirst();
    
            if (cursor.getCount() > 0) {
                  MainObj.User user = new MainObj.User();
                  user.setSip_id(cursor.getString(1));
                  user.setAccount_id(cursor.getString(2));
                   .... and so on
                  userDetails.add(user);
    }
    
    cursor.close();
    db.close();
    
    return userDetails;
    }