如何在android studio上使用webview获取json请求?

时间:2017-11-20 03:35:53

标签: php android mysql json

我在尝试从Webview上的提交中获取JsonRequest时遇到了一些问题。我已经看过一些代码,但它们都没有用,所以到目前为止我从零开始。我知道这个问题会重复,但我仍然不明白。

我的html.php其

<?php
require_once('../Con/Conexion.php');
$username = $_POST['userName'];
$passw = $_POST['userPwd'];
       $statement=mysqli_prepare($connection,"SELECT idTrabajador,`Nombre del Trabajador`,`Unidades por Vender`  FROM `tablausuario` WHERE `Usuario`=? AND Contrasena=?");
mysqli_stmt_bind_param($statement,"ss",$username,$passw);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement,$idTrabajador,$name,$uxv);
$response = array();
$response["success"] = false;
while(mysqli_stmt_fetch($statement)){
$response["success"] = true;
$response["idTrabajador"] = $idTrabajador;
$response["Nombre del Trabajador"] = $name;
$response["Unidades por Vender"] = $uxv;
}
echo json_encode($response);
mysqli_close($connection);
?>

我知道要调用和URL Web查看它的

    WebView web = (WebView) findViewById(R.id.miVisor3);
    web.setWebViewClient(new ConsultaFacturas.MyWebViewClient());
    WebSettings settings = web.getSettings();
    settings.setJavaScriptEnabled(true);
    web.loadUrl(URL_LISTA_CLIENTE);

但是,我怎样才能使用webview登录系统获得这个Json响应

try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        if (success) {
                            String idTra = jsonResponse.getString("idTrabajador");
                            String naMe = jsonResponse.getString("Nombre del Trabajador");
                            String uxv = jsonResponse.getString("Unidades por Vender");
                            Intent openLog = new Intent(LoginActivity.this, MenuPrincipal.class);
                            openLog.putExtra("idTrabajador", idTra);
                            openLog.putExtra("Nombre del Trabajador", naMe);
                            openLog.putExtra("Unidades por Vender", uxv);
                            LoginActivity.this.startActivity(openLog);
                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                            builder.setMessage("Error de Login, Verifique su conexion o los datos ingresados")
                                    .setNegativeButton("Reintentar", null).create().show();

                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

*更新*

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    WebView web = (WebView) findViewById(R.id.miVisor30);
    web.setWebViewClient(new LoginActivity.MyWebViewClient());
    WebSettings settings = web.getSettings();
    settings.setJavaScriptEnabled(true);
    web.addJavascriptInterface(new WebViewResultListener(), "ANDROID");**SHOWS ERROR**
    ADNROID.onResult(request.status, request.responseText);**SHOWS ERROR**
    web.loadUrl(URL_LISTA_CLIENTE);


}

private class MyWebViewClient extends WebViewClient {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

public class WebViewResultListener {
    @JavascriptInterface
    public void onResult(int code, String response) {
        if (code == HttpURLConnection.HTTP_OK) {
            try {
                JSONObject jsonResponse = new JSONObject(response);
                boolean success = jsonResponse.getBoolean("success");
                if (success) {
                    String idTra = jsonResponse.getString("idTrabajador");
                    String naMe = jsonResponse.getString("Nombre del Trabajador");
                    String uxv = jsonResponse.getString("Unidades por Vender");
                    Intent openLog = new Intent(LoginActivity.this, MenuPrincipal.class);
                    openLog.putExtra("idTrabajador", idTra);
                    openLog.putExtra("Nombre del Trabajador", naMe);
                    openLog.putExtra("Unidades por Vender", uxv);
                    LoginActivity.this.startActivity(openLog);
                } else {
                    AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                    builder.setMessage("Error de Login, Verifique su conexion o los datos ingresados")
                            .setNegativeButton("Reintentar", null).create().show();

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("WebViewResultListener", "Error code=" + code);
        }
    }

}

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}
}

1 个答案:

答案 0 :(得分:1)

您无法直接从WebView读取JSON响应,但您可以使用WebView将其从JavascriptInterface内的JavaScript传递到Java。

首先,创建JavascriptInterface类:

public static class WebViewResultListener {

    @JavascriptInterface
    public void onResult(int code, String response) {
        if (code == HttpURLConnection.HTTP_OK) {
            JSONObject jsonResponse = new JSONObject(response);
            // and so on
        } else {
            Log.e("WebViewResultListener", "Error code=" + code);
        }
    }
}

并将其添加到WebView:

web.addJavascriptInterface(new WebViewResultListener(), "ANDROID");

WebView(JavaScript)中,您要求用户输入用户名和密码。

WebView(JavaScript)中,您将这些用户名和密码发送到您的服务器(PHP)并监听结果。 当你收到结果时,你将它从JavaScript传递给Java:

ADNROID.onResult(request.status, request.responseText);

其中 ANDROID JavascriptInterface方法添加的addJavascriptInterface()名称。