2017-05-01 59 views
0

我在java中編寫本機代碼來獲取gmail帳戶的帳戶信息。如何將數據從java返回給javascript?

雖然簡單地從第一種方法返回,我得到了未定義的JavaScript。在第二種方法中,我通過回調將電子郵件地址返回給js,它完美地工作。

第一方法: -

Java代碼: -

@ReactMethod 
    public String getUsername() { 
     AccountManager accountManager = AccountManager.get(myContext); 
     Account account = getAccount(accountManager); 
     if (account == null) { 
      return null; 
     } else { 
      return account.name; 
     } 
    } 

RN側: -

let email = NativeModules.GetInfo.getUsername(); 
alert(email) //undefined 

第二個方法:

java代碼: -

@ReactMethod 
    public void getUsername(Callback errorCallback, Callback successCallback) { 
     AccountManager accountManager = AccountManager.get(myContext); 
     Account account = getAccount(accountManager); 
     if (account == null) { 
      errorCallback.invoke("not found"); 
     } else { 
      successCallback.invoke(account.name); 
     } 
    } 

RN側: -

NativeModules.GetInfo.getUsername((error)=> { 
       alert(error) 
      }, 
      (email)=> { 
       alert(email) //works perfect 
      } 
     ) 
+1

和問題是什麼? –

+0

簡單地返回第一種方法在javascript中產生未定義。我不得不使用回調。任何想法第一種方法有什麼問題? – kishan

回答

1

我認爲你需要一個承諾來處理它。更改方法簽名

public void getUsername(final Promise promise){ 
    ... 
    promise.resolve("username"); 
} 

,並在你的JavaScript

... 
let username = await NativeModules.GetInfo.getUsername(); 
+0

我們不能簡單地返回數據嗎? – kishan

+0

我的猜測是,至少在反應原生文檔中沒有任何東西可以暗示它。 –

+0

反正謝謝:) – kishan

相關問題