2017-05-31 10 views
0

AndroidAnnotationsとRetrofit2を使用してAndroidで単純なMVPを試行していますが、 私は情報を得ることはありません。モデルビュープレゼンターのAAとレトロフィットではなく、データを取得しない

コードプレゼンター

public class ListHomePresenter { 


private List<Post> mPost; 
Client client; 
int error_code = 0; 
String error_msg = ""; 

/** 
* TODO: get all post 
* */ 
public List<Post> getPost() throws SampleExceptions{ 
    RestService restService; 
    client = new Client(); 
    restService = client.getApi(); 

    Call<List<Post>> task = restService.downloadPost(); 

    task.enqueue(new Callback<List<Post>>() { 
     @Override 
     public void onResponse(Call<List<Post>> call, Response<List<Post>> response) { 
      mPost = response.body(); 
     } 

     @Override 
     public void onFailure(Call<List<Post>> call, Throwable t) { 
      mPost = null; 

      error_code = 1; // error 
      error_msg = t.getMessage(); // message 
     } 
    }); 

    if(error_code == 1) 
     throw new SampleExceptions(error_code, "Error"); 

    return mPost; 
} 

}

コード活性

@EActivity(R.layout.activity_home) 

パブリッククラスHomeActivityはAppCompatActivity {

@ViewById(R.id.rvPosts) 
RecyclerView mRvPost; 

PostAdapter mPostAdapter; 

ListHomePresenter mListHomePresenter; 

private StaggeredGridLayoutManager gaggeredGridLayoutManager; 

@AfterViews 
void setupHome(){ 
    downloadPost(); 
} 


@UiThread(propagation = Propagation.REUSE) 
void downloadPost(){ 
    try{ 
     mListHomePresenter = new ListHomePresenter(); 
     gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1); 
     mRvPost.setLayoutManager(gaggeredGridLayoutManager); 
     mPostAdapter = new PostAdapter(HomeActivity.this, mListHomePresenter.getPost()); 
     mRvPost.setAdapter(mPostAdapter); 

    }catch (SampleExceptions e){ 

    } 
} 
を拡張します

}

しかし、これまでにヌルデータを取得しています。

Help Me!

答えて

1

例:

プレゼンター:

public class ListHomePresenter { 

     private List<Post> mPost; 
     Client client; 
     int error_code = 0; 
     String error_msg = ""; 
     HomeView view; 

     public ListHomePresenter(HomeView view) { 
      this.view = view; 
     } 

     /** 
     * TODO: get all post 
     * */ 
     public void loadPost() throws SampleExceptions{ 
      RestService restService; 
      client = new Client(); 
      restService = client.getApi(); 

      Call<List<Post>> task = restService.downloadPost(); 

      task.enqueue(new Callback<List<Post>>() { 
       @Override 
       public void onResponse(Call<List<Post>> call, Response<List<Post>> response) { 
        view.retrieveData(response.body()); 
       } 

       @Override 
       public void onFailure(Call<List<Post>> call, Throwable t) { 
        mPost = null; 

        error_code = 1; // error 
        error_msg = t.getMessage(); // message 
       } 
      }); 

      if(error_code == 1) 
       throw new SampleExceptions(error_code, "Error"); 
     } 

} 

活動:

@ViewById(R.id.rvPosts) 
RecyclerView mRvPost; 

PostAdapter mPostAdapter; 

ListHomePresenter mListHomePresenter; 

private StaggeredGridLayoutManager gaggeredGridLayoutManager; 

@AfterViews 
void setupHome() { 
    downloadPost(); 
} 


@UiThread(propagation = Propagation.REUSE) 
void downloadPost() { 
    try { 
     mListHomePresenter = new ListHomePresenter(this); 
     mListHomePresenter.loadPost() 
    } catch (SampleExceptions e) { 

    } 
} 

// Method implemented from view interface 
@Override 
void retrieveData(List<Post> postList) { 
    gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1); 
    mRvPost.setLayoutManager(gaggeredGridLayoutManager); 
    mPostAdapter = new PostAdapter(HomeActivity.this, postList); 
    mRvPost.setAdapter(mPostAdapter); 
} 

だけあなたはあなたが持っている必要がある2つのクラス

+1

を書くこの概念を明確にするためにこの例を見ることができます[Android MVP](https://github.com/antoniolg/androidmvp) –

+0

私のインターフェイスメソッドを使用する方法プレゼンター機能?インスタンス化していますが、エラーが発生します –

+1

プレゼンターコンストラクターでビューインターフェイスを設定します –

1

getPostメソッドで競合状態が発生しました。返されたmPostは、コールバックがまだ応答を返していません。

getPostメソッドは何も返さず、一度onResponseを渡すと、アダプタを満たすビューメソッドを呼び出すことをお勧めします。

これにより、常にデータが保持されます。ここで

+0

間の相互作用へのインタフェースビューを実装する必要がありますMVPパターンで定義されているように、現在とアクティビティとの間で相互作用するインターフェイス。 –

+0

ありがとうございます! –

+0

私はRecyclerViewとそのコンテキストをパラメータとして渡しました。いいんだよ?私はちょうどMVPで始まっています –

関連する問題