代码之家  ›  专栏  ›  技术社区  ›  flix

如何获取Android中getter-setter方法的价值?

  •  2
  • flix  · 技术社区  · 6 年前

    我读了很多关于这个的问题,但我现在仍然找不到任何正确的答案。

    所以我有这样的代码

    VisitReport.java

    public class VisitReport{
      public static final String TABLE_NAME = "VisitReport";
    
      public static final String COLUMN_ID = "ID";
      public static final String COLUMN_VisitPurpose = "VisitPurpose";
      public static final String COLUMN_VisitResult = "VIsitResult";
    
      private int id;
      private String VisitPurpose;
      private String VisitResult;
    
      public static final String CREATE_TABLE =
          "CREATE TABLE " + TABLE_NAME + "("
              + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
              + COLUMN_VisitPurpose + " TEXT,"
              + COLUMN_VisitResult + " TEXT,"
              + ")";
    
      public VisitReport() {
      }
    
      public VisitReport(
        int id,
        String VisitPurpose,
        String VisitResult
      ){
        this.id = id;
        this.VisitPurpose = VisitPurpose;
        this.VisitResult = VisitResult;
      }
    
      public int getId() { return id; }
      public void setId(int id) { this.id = id; }
      public String getVisitPurpose() { return VisitPurpose; }
      public void setVisitPurpose(String VisitPurpose) { this.VisitPurpose = VisitPurpose;}
      public String getVisitResult() { return VisitResult; }
      public void setVisitResult(String VisitResult) { this.VisitResult = VisitResult;}
    }
    

    DatabaseHelper.java (我使用的代码)

      public VisitReport getVisitReport(long id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(VisitReport.TABLE_NAME,
            new String[]{
              VisitReport.COLUMN_ID,
              VisitReport.COLUMN_VisitPurpose,
              VisitReport.COLUMN_VisitResult,
            },
            VisitReport.COLUMN_ID + "=?",
            new String[]{String.valueOf(id)}, null, null, null, null);
    
        if (cursor != null){
          cursor.moveToFirst();
        }
        VisitReport vr = new VisitReport(
          cursor.getInt(cursor.getColumnIndex(VisitReport.COLUMN_ID)),
          cursor.getString(cursor.getColumnIndex(VisitReport.COLUMN_VisitPurpose)),
          cursor.getString(cursor.getColumnIndex(VisitReport.COLUMN_VisitResult))
        cursor.close();
        return vr;
      }
    

    我想把值传递给 react native 使用 bridge module ,但我得到一个错误

    Cannot convert argument of type class mypackage.VisitReport

    这是我试过的代码:

    @ReactMethod
    public void getVisitReport(int id, Callback cb) {
      DatabaseHelper db = new DatabaseHelper(reactContext);
      cb.invoke(db.getVisitReport(id));
    }
    

    发现 this question 作为我的参考,我仍然不知道这些的含义,因为当我记录 getVisitReport() 我得到 mypackage.VisitReport@12d960c9 我不知道这是什么意思

    我做错什么了吗?有人能帮我怎么做吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   valegians    6 年前

    您可以通过执行以下操作分别访问每个值

    db.getVisitReport(id).getVisitPurpose
    

    VisitReport vr = db.getVisitReport(id); vr.getVisitPurpose
    

    那是因为 getVisitReport() 返回一个 对象 . 对象是包含一组变量的类的实例。

    当你这样做的时候 getVisitReport(id).toString() 你正在做一个返回 字符串表示 对象本身, 它的价值。

    如果要同时获取对象的所有属性,则需要在内部创建一个新方法 VisitReport 它返回所有对象中的所有属性,例如,对象数组(因为Java中的所有对象都扩展对象),请参见 How to declare an array of different data types )

    请确保您阅读更多有关Java和对象的内容。这里有一个很好的链接: https://www.tutorialspoint.com/java/java_object_classes.htm

        2
  •  1
  •   MikeT    6 年前

    从某种程度上来说,以下内容可能有效:

    VisitReport vr = db.getVisitorReport(id);
    cb.invoke("ID=" +String.valueOfvr.getid()) + ", Purporse=" + vr.getVisitPurpose"); // etc 
    
    • 这假定invoke可以接受一个字符串。