IBM Worklight 6.1 - Os dados retornados no retorno de chamada (em WL.NativePage.show()) são indefinidos
-
21-12-2019 - |
Pergunta
Estou tentando seguir o exemplo deste Tutorial de luz de trabalho, para enviar dados de volta da página nativa.Porém, quando retorna da página nativa, o argumento (data
) na função de retorno de chamada (backFromNativePage(data)
) é indefinido.Sou novo no trabalho com Worklight, então talvez não esteja fazendo isso corretamente?Eu esperava que alguém pudesse esclarecer o que eu poderia estar fazendo de errado.Obrigado!
Esta é a aparência de alguns dos meus códigos:
Login.java:
public class Login extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LoginWebViewClient client = new LoginWebViewClient(this);
webView = (WebView) findViewById(R.id.login);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(client);
webView.loadUrl(url);
}
public void setAppDataAndReturn(HashMap<String, String> dataList) {
Intent returnData = new Intent();
for (Map.Entry<String, String> item : dataList.entrySet()) {
returnData.putExtra(item.getKey(), item.getValue());
}
setResult(RESULT_OK, returnData);
finish();
}
}
LoginWebViewCliente:
public class LoginWebViewClient extends WebViewClient {
private Login webAct;
private HashMap<String, String> dataList;
public LoginWebViewClient(Login webAct) {
this.webAct = webAct;
}
@Override
public void onPageFinished(WebView view, String url) {
this.dataList = getData(); //returns a HashMap
webAct.setAppDataAndReturn(dataList);
}
AppInit.js:
var backFromNativePage = function(data) {
WL.Logger.error("backFromNativeLoginPage: data= "+ data);
};
var showNativePage = function() {
WL.NativePage.show('com.app.Login', backFromNativePage, {param: 'some value'});
};
A propósito, estou usando o Worklight versão 6.1.0.00-20131219-1900 e estou testando em um telefone Android 4.3.
Qualquer ajuda seria muito apreciada!
Editar:
Seguindo a sugestão do @IdanAdar, foi assim que mudei para que funcionasse:
AppInit.js:
var showNativePage = function() {
WL.NativePage.show('com.app.Login', function(data) {
WL.Logger.error("backFromNativeLoginPage: data= "+ data);
}, {param: 'some value'});
};
Solução
Com base na discussão nos comentários:Tente definir a função de retorno de chamada como uma função em vez de uma variável.
function backFromNativePage(data) {
...
}
Outras dicas
Tentei a maior parte do seu código (não usei a parte webclient), como um projeto novo e funciona.
Você pode fazer download da amostra do Worklight e testá-la?
Mais importante ainda, a página nativa carrega para você, ou seja, você adicionou a atividade ao android-manifest.xml?
Você pode enviar seu projeto Eclipse para algum lugar para que eu possa vê-lo e ver o que há de errado.Isso realmente deve funcionar sem problemas.