最近我遇到了以下问题:我有一个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());
答案 0 :(得分:0)
它伪代码。逻辑是:
而不是运行单挑,你可以试试n-way。如果登录成功设置为notOk。当while测试它的执行时它将结束。否则,asynctask将在UI线程队列上发布runnable,UI Thread将显示一个对话框。在Dialog委托中,设置新的用户名和密码,并通知asynctask唤醒(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();
}
}