0

最近、次の問題に遭遇しました: HttpURLConnection から非同期でデータをロードする webview があります。ユーザーから資格情報を提供する必要があるため、http 接続中に基本認証に進む必要があるとします。URL に認証が必要かどうかわからない場合は、応答から 401 エラーが返されます。Async-Thread を一時停止して、スレッドを停止せずにユーザーに資格情報 (アラート ダイアログで px.by) を要求できる適切な方法はありますか?

 URL requestedUrl = new URL(url);
        urlConnection = (HttpURLConnection) requestedUrl.openConnection(proxy);
        if (urlConnection instanceof HttpsURLConnection) {
            ((HttpsURLConnection) urlConnection)
                      .setSSLSocketFactory(sslContext.getSocketFactory());
        }
        String userandpass=username+":"+password;

        String basicAuth = "Basic "
                + new String(Base64.encode(
                        userandpass
                                .getBytes(),   Base64.NO_WRAP));
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Authorization", basicAuth);
        result = IOUtil.readFully(urlConnection.getInputStream());
4

1 に答える 1

0

疑似コードです。ロジックは次のとおりです。

シングルシュートを実行する代わりに、n-way を試すことができます。ログインが成功した場合、notOk に設定されます。while テストが実行されると終了します。それ以外の場合、asynctask は実行可能ファイルを UI スレッド キューに投稿し、UI スレッドはダイアログを表示します。Dialog デリゲートで、新しいユーザー名とパスワードを設定し、asynctask に wakeup を通知します ( notifyAll())。

obj は、wait と notifyAll で同じです

while (notOk) {

   // do your network staff

  if (authOk) {
      notOk= false;
      continue;
  } else {

    runOnTheUiThread(
       run () {
            // a dialog with edit text for username and password.
            // and a button "ok". When user press ok:

           {
              myAsynctAskreference.setUserenameAndPassword(username, password);
               synchronized(obj) {
                   obj.notifyAll();
               }
           }
       }
    )

  }

   synchronized(obj) {
        obj.wait();
   }

}
于 2013-05-22T15:35:05.050 に答える