2017-11-20 21 views
0

私は、Webviewでの提出からJsonRequestを取得する際に問題が少しあります。私はいくつかのコードを見ましたが、それらのどれも動作しないので、私は今までゼロからです。私はこの質問が繰り返されることを知っているが、私はまだ理解していない。アンドロイドスタジオでwebviewを使用してjsonリクエストを取得するにはどうすればよいですか?

私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); 
?> 

私はWebViewのログインシステム

を使用して、JSONレスポンスを、これをobtaintできるか、その

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

を表示呼び出し、URLのWebすることを知っているが、

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

あなたは直接WebViewからJSON応答を読むことはできませんが、JavascriptInterfaceを使用してJavaにWebView内のJavaScriptからそれを渡すことができます。あなたはユーザのユーザ名とパスワードを尋ねるWebView(JavaScriptの)内部

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

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に追加します。

まず、JavascriptInterfaceクラスを作成します。

WebView(JavaScript)の内部では、これらのユーザー名とパスワードをサーバー(PHP)に送信し、結果を待ち受けます。 そして、あなたが結果を受信したときには、JavaScriptからJavaへ渡し:

アンドロイドaddJavascriptInterface()法で添加 JavascriptInterfaceの名前です
ADNROID.onResult(request.status, request.responseText); 

+0

こんにちは@ fishbone、私はあなたが私に与えた答えをチェックしていますが、私は分からないと "そしてWebViewに追加する:"最後まで、私はこれで私はかなり失われている。どのようにして "尋ねる"プロセスがエキサイティングなのでしょうか? 、私は自分のコードを更新しています –

+0

'ADNROID.onResult(request.status、request.responseText);'は、 'WebView.'に表示されたあなたのWebページ上のJavaScriptで実行する必要があります。 Java。 私は、サーバーでのすべての操作(ユーザー名とパスワードの入力と送信)はJavaScriptで実行する必要があることを覚えています。メソッド 'WevView.loadUrl()'は、WebページにログインフォームとJavaScriptコードをロードするためにのみ使用し、サーバーにリクエストを送信し、結果を取得し、その結果をJavaに転送します。 – fishbone

関連する問題