我在尝试从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();
}
}
答案 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()
名称。