2016-05-31 9 views
0

変数文字列をRunnableに送信しようとしていますが、これに対して2つの変数を作成する必要があります。 1つの通常の文字列内容と1つの最終文字列最終的な内容他の文字列の内容が割り当てられています。2つの変数を使用して変数情報をRunnableに送信しないようにする

これは通常の方法ですか、2つの変数を作成しない方が良いでしょうか?

+0

これは、匿名の内部クラスに外側のクラスから変数への参照を渡すための通常の方法です。ただし、AsyncTaskを使用すると、初期化データ、進捗データ、結果データを好きなようにパラメータ化できます。 –

+0

「コンテンツ」が収集されたときにIOExceptionが発生した場合はどうなりますか? – DeeV

答えて

1

それは、Java言語の設計の制限ですが、あなたはRxJavaを使用していないのはなぜ

final String content; 
try { 
    content = response.body().string(); 
} catch (IOException e) { 
    content = ""; 
    // Handle exception 
} 
runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     TextView text = (TextView)findViewById(R.id.textView); 
     text.setText(content); 
    } 
}); 
+1

この答えで少し解説すると、変数をfinalとして宣言すると、参照が設定された時間から、runメソッド内のコードによってアクセスされた時間まで参照が設定されなくなります。 –

0

を書くことができるでしょうか?私はあなたがちょうどあなたがインターネットからデータを取得した後、UIを更新したいと思います。

Observable observable = Observable.create(OnSubscribe()...) 
.subscribeOn(Shceduler.io).observeOn(AndroidSchedulers.mainthread) 
1

あなたはRunnableをのカスタム実装を作成することは、ここでは一例

void foo(){ 
    String content = ""; 
    try { 
     content = response.body().string(); 
    } catch (IOException e) { 
     // Handle exception 
    } 
    runOnUiThread(new MyCustomRunnable(content)); 
} 

private class MyCustomRunnable implements Runnable { 
    private String content; 

    public MyCustomRunnable(String content) { 
     this.content = content; 
    } 

    @Override 
    public void run() { 
     TextView text = (TextView)findViewById(R.id.textView); 
     if (text != null) { 
      text.setText(content); 
     } 
    } 
} 
関連する問題