-3

主なアクティビティでは、最も人気のある映画をダウンロードするAPIを呼び出します。ムービーがダウンロードされると、私はadatper.notifyDataSetChanged()を呼び出します。 この呼び出しはAsyntaskのonPostExecute()で行われていますが、リサイクラの変更はありません。メインのRecyclerView /アダプタはAsyntaskの新しいデータでリフレッシュされません

パート:

mMovieList = new ArrayList<>(); 
     mMovieAdapterRecyclerView = new MovieAdapterRecyclerView(this, mMovieList); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     mRecyclerView.setAdapter(mMovieAdapterRecyclerView); 
     receiveMovies(); 

ここでは、私は映画をロードし、アダプタを通知するために呼び出すメソッドです。

private void receiveMovies() { 

     new AsyncTask<Void, Void, Boolean>() { 
      @Override 
      protected Boolean doInBackground(Void... voids) { 
       try { 
        JSONObject response = null; 
        OkHttpClient client = new OkHttpClient(); 
        MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 

        String mUrl = ConnectionUtils.TRAKT_URL + ConnectionUtils.POPULAR + ConnectionUtils.ALL_INFO; 
        Request request = new Request.Builder() 
          .url(mUrl) 
          .addHeader(ConnectionUtils.TRAKT_API_VERSION, ConnectionUtils.TRAKT_API_VERSION_NUM) 
          .addHeader(ConnectionUtils.TRAKT_API_KEY, ConnectionUtils.API_KEY) 
          .addHeader(ConnectionUtils.TRAKT_CONTENT, JSON.toString()) 
          .get() 
          .build(); 

        Response clientResponse = client.newCall(request).execute(); 
        int code = clientResponse.code(); 
        String responseJson = clientResponse.body().string(); 
        Gson gson = new Gson(); 
        Type listType = new TypeToken<List<Movie>>() { 
        }.getType(); 
        mMovieList = gson.fromJson(responseJson, listType); 
        return true; 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       return false; 
      } 

      @Override 
      protected void onPostExecute(Boolean aBoolean) { 
       if(aBoolean) { 
        mMovieAdapterRecyclerView.notifyDataSetChanged(); 
       } 
      } 
     }.execute(); 
    } 

APIへのリクエストは正しいですし、デバッグすると情報が表示されるため、情報が表示されます。

どうすれば更新できますか?

UPDATE

enter image description here

+0

あなたはOkHttpを使用するときにAsyncTaskは必要ありません... http://stackoverflow.com/questions/34967505/android -okhttp-asynchronous-calls –

+1

javaの基本的なことを学んでください...変数に値を代入してください.... – Selvin

+0

'mMovieList = gson.fromJson(responseJson、listType);では' mMovieList.addAll(gson.fromJson( responseSource、listType)) ' –

答えて

-2
if(aBoolean) { 
       // pass the updated list here which you get after downloading 
       // like mMovieAdapterRecyclerView.updateMoviewList(passList) 
        mMovieAdapterRecyclerView.notifyDataSetChanged(); 
       } 

リストが適切な映画のリストを取得するかどうか

+0

どのようにブール値とリストを渡しますか?しかし、これは必要ではありません。このリストはメンバー変数 –

+0

によって直接アクセスできます。リストはグローバルなので、アダプタへの参照を渡すことができ、onPostExecuteに入っているブール値を受け渡すことができます –

0

あなたのアダプタクラスを表示してくださいすることができているかどうかをチェック。私はあなたがsetmovies()アダプタクラスで機能し、その関数を呼び出す前にメソッドを呼び出す必要があると思いますmMovieAdapterRecyclerView.notifyDataSetChanged();

+0

Nope。方法は必要ありません。リストを再割り当てしないでください。 –

+0

これでpostexecute()のコードを試してみてください。 - mMovieAdapterRecyclerView = new MovieAdapterRecyclerView(this、mMovieList); mMovieAdapterRecyclerView.notifyDataSetChanged(); – Sarbjyot

+0

これは1つの方法ですが、doInBackgroundメソッドでムービーリストを正しく更新することができます...onPostExecuteはきれいです –

関連する問題