1

私のアプリケーションには、ログインフォームとして機能するアクティビティがあります。ユーザー ID とパスワードを取得したら、URL を開く必要があります。

この Web ページにはログイン フォーム (ユーザー ID とパスワード フィールドも含む) が含まれており、ユーザーが送信ボタンをクリックすると、java-script 関数によって処理されたフォームとフォームの内容がサーバーに送信されます。

ただし、このページの表示をバイパスし、代わりに URL をロードし、ユーザー ID とパスワードをパラメーターに入力し、ユーザーに代わって JavaScript の doSubmit() 関数を呼び出し、最終的にサーバーの応答を取得する必要があります。

ユーザー ID とパスワードを持っていますが、それを JavaScript に挿入する方法がわかりません。これは私のコードです:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_loginweb);

        Log.i(TAG, "Try to create activity...");

        WebView webView = (WebView) findViewById(R.id.webView);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.loadUrl(LOGINPAGE_URL);


        webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
    } 
}

public class JavaScriptInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        JavaScriptInterface(Context c) {
            mContext = c;
        }

        /** Show a toast from the web page */
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

任意の提案をいただければ幸いです。ありがとう

4

2 に答える 2

0

そのための1つの可能な解決策は、HttpClient(apache-commons)を使用し、アクティビティから直接サーバーに接続することだと思います。

public static void login(String pUsername, String pPassword){
HttpClient client = new HttpClient();

// Create a method instance.
GetMethod method = new GetMethod(YOUR_LOGIN_URL_WHICH_IS_CALLED_FROM_JS);

// Provide custom retry handler is necessary
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
        new DefaultHttpMethodRetryHandler(3, false));
method.setQueryString(new NameValuePair[] {      new NameValuePair("username", pUsername),new NameValuePair("password", pPassword)  });  

try {
  // Execute the method.
  int statusCode = client.executeMethod(method);

  if (statusCode != HttpStatus.SC_OK) {
    System.err.println("Method failed: " + method.getStatusLine());
  }

  // Read the response body.
  byte[] responseBody = method.getResponseBody();

  // Deal with the response.
  // Use caution: ensure correct character encoding and is not binary data
  System.out.println(new String(responseBody));

} catch (HttpException e) {
  System.err.println("Fatal protocol violation: " + e.getMessage());
  e.printStackTrace();
} catch (IOException e) {
  System.err.println("Fatal transport error: " + e.getMessage());
  e.printStackTrace();
} finally {
  // Release the connection.
  method.releaseConnection();
}}

まあ、これよりもはるかに手間がかかると思います(SSL、Postparamsを使用し、結果を処理する)が、そのための非常に役立つチュートリアルがたくさんあります。

于 2012-08-22T11:35:32.283 に答える
0

Javascript インターフェイスで、次のようなメソッドをいくつか追加します。

public String getUserId() {
        //return userId value here
    }

public String getPassword() {
        //return password value here
    }

JavaScript側から:

//Startup stuff
$(document).ready(function(e) { 
    var userId = Android.getUserId();
    var password = Android.getPassword();

  $("#idofuserIdField").val(userId);
$("#idofPasswordField").val(password);

//callSubmitFunctionHere
});
于 2012-08-22T09:59:15.617 に答える