2017-05-24 13 views
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を実装に使用したいと思っていましたが、警告ダイアログの応答を待つことはできません。実際は効率的ではない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を待っている応答を実装について知らさが、それは私:(あなたの助けのための

おかげで、私の目的に適合していません!

タリク

答えて

0

だけObject.wait()を使用し、 Object.notify()

@Override 
public boolean promptPassword(String s) { 

    synchronized (someObject) { 
     // Notify GUI thread about password prompt 
     publishProgress(); 

     // wait for password prompt to be submitted 
     wait(); 
    } 

    return false; 
} 

@Override 
public void onProgressUpdate (Progress... values) 
{ 
    // Do password prompt here 

    // And tell background thread, that we have a password already 
    synchronized (someObject) { 
     notify(); 
    } 
} 
+0

awnserありがとうございました。同期と待機/通知について多くのことを学びました。しかし、このケースは私のためのベストではない、私は回避策を見つけた。ありがとうございました!!! – LenovoCrafter

関連する問題