IBM Worklight 6.1 - Os dados retornados no retorno de chamada (em WL.NativePage.show()) são indefinidos

StackOverflow https://stackoverflow.com//questions/21009089

  •  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'});
};
Foi útil?

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.

http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v610/UsingNativePagesInHybridAppsProject.zip

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top