2016-10-31 3 views
0

MVPパターンに従ってアンドロイドでrxjavaを使用しようとしています。rxjavaの使い方が分かりません

私は1週間以上を勉強しましたが、それを使用するのは難しいです。悲しいことです。

MainActivityのボタンをクリックすると、 onclickイベントがnetworkPresenter.checkConnectivity(コンテキスト)を実行します。

コードをrxjavaに変更できる場所を教えてください。

ありがとうございます。

ハッピーハロウィン!

public class NetworkPresenter { 

    private NetworkConnector nc; 
    private MessageSetter ms; 
    private View view; 

    public NetworkPresenter(NetworkPresenter.View view) { 
     this.view = view; 
     nc = new NetworkConnector(); 
     ms = new MessageSetter(); 
    } 

    public void checkConnectivity(Context context) { 
     int connType = nc.getConnectionStatus(context); 
     view.updateReceivedMessageTextView(ms.setMessage(connType)); 
    } 

    public interface View { 
     void updateReceivedMessageTextView(String message); 
    } 
} 

public class NetworkConnector { 

    static final int NONE = 0; 
    static final int WIFI = 10; 
    static final int MOBILE = 20; 

    public int getConnectionStatus(Context context) { 

     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

     int result = 0; 

     if (activeNetwork != null) { 
      if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)   result = WIFI; 
      else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) result = MOBILE; 

      if (isOnline()) return result; 
      else   return result + 1; 
     } 
     return NONE; 
    } 
} 

public class NetworkChecker extends Thread { 

    public static final String CONNECTION_CONFIRM_CLIENT_URL = "http://clients3.google.com/generate_204"; 
    private boolean success; 
    private String host; 

    public NetworkChecker(String host){ 
     this.host = host; 
    } 

    @Override 
    public void run() { 

     HttpURLConnection conn = null; 
     try { 
      conn = (HttpURLConnection)new URL(host).openConnection(); 
      conn.setRequestProperty("User-Agent","Android"); 
      conn.setConnectTimeout(300); 
      conn.connect(); 
      int responseCode = conn.getResponseCode(); 
      if(responseCode == 204) success = true; 
      else     success = false; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      success = false; 
     } 
     if(conn != null){ 
      conn.disconnect(); 
     } 
    } 

    public boolean isSuccess(){ 
     return success; 
    } 

    public static boolean isOnline() { 
     NetworkChecker cc = new NetworkChecker(CONNECTION_CONFIRM_CLIENT_URL); 
     cc.start(); 
     try{ 
      cc.join(); 
      return cc.isSuccess(); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
     return false; 
    } 
} 

答えて

3

点は、rxJava一本のパイプから出てくると別のパイプにリダイレクトされ、データとして全てのイベントを表しています。ビューのウィジェットをrxJavaにバインドするためのRxBindingライブラリーです。したがって、すべてのビューに対して、1つのオブザーバブルがあります。 MVPパターンプレゼンターはロジック自体を担当しているため、プレゼンターにビューとモデルを登録するときは、そのObservableをViewから取得し、サブスクリプションしてサブスクリプションオブジェクトを保存します。ビューが切り離されたときにそのサブスクリプションを切断する必要があります。これは通常、onPause()メソッドからプレゼンターに呼び出されます。そして、onResume()で、プレゼンターのビューを再度登録します。 ワークフローはfoollowsとなります: - イベントをウィジェット化してrxJavaのパイプ(Observable)に渡します。 Viewが添付されている場合、このobserableはPresenterによって監視されます。 Presenterはそのイベントを受け取り、それを処理します。 ViewがPresenterに登録されていない場合、このイベントはこれ以上行われません。サブスクリプションオブジェクトは、一部のパイプが一部の受信者に接続されているという事実を表します。また、サブスクライブ解除すると、そのパイプはイベントソース(ウィジェット)から切り離されます。

+0

種類豊富な説明ありがとうございます! –

関連する問題