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

Я новичок в Android, и я запутался в получении значения после вставки некоторых данных в sqlite, изучая этого урока , есть какой-то способ получить строку по id,

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

вот код, который я пробовал:

//java bridge
@ReactMethod
public void insertNote(String Note, Callback successCb){
  long id;
  DatabaseHelper db = new DatabaseHelper(reactContext);
  id = db.insertNote(Note);
  Note note = db.getNote(id);
  if(note !=null){
    successCb.invoke(note);
  } else {
    //pass error callback
  }
}

//Javascript code
MyModule.insertNote("Try Insert Note to sqlite", (success)=>{console.log(success)})

Я хочу добавить обратный вызов, чтобы показать уже вставленные данные, но код выше показывает ошибку

E/unknown:ReactNative: Exception in native call
    java.lang.RuntimeException: Cannot convert argument of type class com.digifc.sqlite.Note
        at com.facebook.react.bridge.Arguments.fromJavaArgs(Arguments.java:191)
        at com.facebook.react.bridge.CallbackImpl.invoke(CallbackImpl.java:32)
        at com.digifc.sqlite.RNDigiFcSqliteModule.insertNote(RNDigiFcSqliteModule.java:79)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160)
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
        at android.os.Looper.loop(Looper.java:135)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192)
        at java.lang.Thread.run(Thread.java:818)

кто-нибудь может помочь мне решить проблему?

EDIT: Ссылка: Что является причиной этой проблемы «Невозможно преобразовать аргумент класса класса org.json.JSONArray» в реагирующий нативный Android?

попробуйте изменить код Java следующим образом:

@ReactMethod
public void insertNote(String Note, Callback successCb){
  long id;
  DatabaseHelper db = new DatabaseHelper(reactContext);
  id = db.insertNote(Note);
  Note note = db.getNote(id);
  WritableMap resultData = new WritableNativeMap();
  if(note !=null){
    resultData.putString("Value", String.valueOf(note));
    successCb.invoke(resultData);
  } else {
    //pass error callback
  }
}

Я получил результат I/ReactNativeJS: { Value: 'com.digifc.sqlite.Note@12d960c9' }, но ожидаемый результат должен быть I/ReactNativeJS: { Value: 'Try Insert Note to sqlite' }

1 Ответ

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

вместо

resultData.putString("Value", String.valueOf(note));

использовать

resultData.putString("Value", note.getNote());

Здесь note относится к классу Note.
В классе есть метод getNote, который возвращает строку, представляющую текст, который вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...