Как получить значение метода установки геттер в Android? - PullRequest
0 голосов
/ 16 января 2019

Я прочитал много вопросов здесь, но я все еще не могу найти правильный ответ по моему делу

поэтому у меня есть такой код

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

Найдите этот вопрос в качестве справочной информации. Я не понимаю, что они означают, потому что когда я записываю значение getVisitReport(), я получаю mypackage.VisitReport@12d960c9, и я не знаю значения это

я что-то не так делаю? Кто-нибудь может помочь мне, как заставить это работать?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы можете получить доступ к каждому значению индивидуально, выполнив

db.getVisitReport(id).getVisitPurpose

Или

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

Это потому, что getVisitReport() возвращает объект . Объект является экземпляром класса, который содержит набор переменных.

Когда вы делаете getVisitReport(id).toString(), вы возвращаете строковое представление самого объекта, не его значений.

Если вы хотите получить все атрибуты объекта одновременно, вам нужно создать новый метод внутри VisitReport, который возвращает все атрибуты, например, в массиве объектов (поскольку все объекты в Java расширяют Object см. Как объявить массив различных типов данных ).

Пожалуйста, убедитесь, что вы читаете больше о Java и объектах. Вот хорошая ссылка: https://www.tutorialspoint.com/java/java_object_classes.htm

0 голосов
/ 16 января 2019

В предположении может работать что-то вроде следующего: -

VisitReport vr = db.getVisitorReport(id);
cb.invoke("ID=" +String.valueOfvr.getid()) + ", Purporse=" + vr.getVisitPurpose"); // etc 
  • Предполагается, что invoke может принять строку.
...