0
我想保留AlertDialog響應的任務。我知道doInBackground方法中的UI交互違反規則,但在onPreExecute中不可能這樣做。AlertDialog響應的保留任務
public static class AsyncMongoConnection extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
JSch jSch = new JSch();
try {
Properties config = new Properties();
config.put("StrictHostKeyChecking", "false");
Session session = jSch.getSession("username", "host-address", 22);
//session.setPassword("password");
session.setConfig(config);
session.connect();
session.setPortForwardingL(27017, "host-address", 27017);
MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 27017), Collections.singletonList(MongoCredential.createScramSha1Credential("user", "authdb", "password".toCharArray())));
FindIterable<Document> documents = mongoClient.getDatabase("database").getCollection("users").find();
Log.d("MongoClient", documents.iterator().next().toJson());
} catch (JSchException e) {
e.printStackTrace();
}
return null;
}
}
正如你所看到的,我想創建一個從本地設備到遠程主機地址的端口轉發。但是我想啓用StrictHostKeyChecking,因爲這是一個很大的安全問題,如果我不這樣做的話。我的問題是現在爲該會話實現一個UserInfo。如果我不想預先保存它,我需要提示用戶輸入密碼。如果遠程主機的指紋未知,我也不想創建一個警告用戶的對話框。在這種情況下,它不是。在實現中,我想使用promptPassword來實現,但是我不能等待alert對話框的任何響應,期望使用while循環,我相信這真的是效率不高。 promptPassword方法正在等待,我返回一個布爾值。
public class SSHUserInfo implements UserInfo {
private String passphase = null;
private String password = null;
private Context context = null;
public SSHUserInfo(Context context) {
this.context = context;
}
@Override
public String getPassphrase() {
return passphase;
}
@Override
public String getPassword() {
return password;
}
@Override
public boolean promptPassword(String s) {
return false;
}
@Override
public boolean promptPassphrase(String s) {
return false;
}
@Override
public boolean promptYesNo(String s) {
return false;
}
@Override
public void showMessage(String s) {
}
}
我已經通知有關實現等待AlertDialog一個迴應,但它不適合我的目的:(我
感謝您的幫助!
塔裏克
謝謝你的awnser。瞭解了很多關於同步和等待/通知的信息。但是這種情況對我來說並不是最好的,我找到了一個解決方法。謝謝!!! – LenovoCrafter