在HttpURLConnection期间请求凭据而不中断线程

时间:2013-05-22 14:51:58

标签: android asynchronous httpurlconnection credentials

最近我遇到了以下问题:我有一个webview,它以异步方式从HttpURLConnection加载数据,现在说你需要从用户提供凭据,以便在http连接期间继续进行基本身份验证。您不知道网址是否需要身份验证,您只是从响应中收到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());

1 个答案:

答案 0 :(得分:0)

它伪代码。逻辑是:

而不是运行单挑,你可以试试n-way。如果登录成功设置为notOk。当while测试它的执行时它将结束。否则,asynctask将在UI线程队列上发布runnable,UI Thread将显示一个对话框。在Dialog委托中,设置新的用户名和密码,并通知asynctask唤醒(notifyAll())。

对于wait和notifyAll

obj是相同的

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();
   }

}