2017-10-12 4 views
0

J'écris ce code pour l'activité principale de recycleview avec son adaptateur et récupère des données à partir de données json donc ma question concerne le onPostExecute() J'ai utilisé avant une chaîne, j'ai donc utilisé .append avec tout fonctionne, maintenant j'ai utilisé un arraylist pour la première fois si ce qui est le problème avec ma fonctiononPostExecute ArrayList

Activité principale:

public class MainActivity extends AppCompatActivity { 

    private static final ArrayList<MovieItem> NUM_MOVIES = ; 
    RecyclerViewAdapter mAdapter; 
    RecyclerView mMoviesList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mMoviesList = (RecyclerView) findViewById(R.id.rv_movies); 

     GridLayoutManager LayoutManager = new GridLayoutManager(this, 2); 

     mMoviesList.setLayoutManager(LayoutManager); 

     mMoviesList.setHasFixedSize(true); 

     mAdapter = new RecyclerViewAdapter(NUM_MOVIES); 

     mMoviesList.setAdapter(mAdapter); 

     loadMoviesData(); 
    } 

    private void loadMoviesData() { 
     new FetchMoviesTask().execute(); 
    } 

    public class FetchMoviesTask extends AsyncTask<String, Void, ArrayList<MovieItem>> { 

     @Override 
     protected ArrayList<MovieItem> doInBackground(String... params) { 
      if (params.length == 0) { 
       return null; 
      } 
      String movie = params[0]; 
      URL moviesRequestUrl = NetworkUtils.buildUrl(movie); 

      try { 
       String jsonMovieResponse = NetworkUtils.getResponseFromHttpUrl(moviesRequestUrl); 

       ArrayList<MovieItem> simpleJsonMovieData = OpenMovieJsonUtils.getSimpleMovieStringsFromJson(MainActivity.this, jsonMovieResponse); 

       return simpleJsonMovieData; 

      } catch (Exception e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } 

     protected void onPostExecute(ArrayList<MovieItem> movieData) { 
      if (movieData != null) { 
       for (MovieItem movie : movieData) { 
        mMoviesList.append((movie) + "\n\n\n"); 
       } 
      } 
     } 
    } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.sort, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      int id = item.getItemId(); 

      if (id == R.id.most_popular) { 
       loadMoviesData(); 
       return true; 
      } 

      if (id == R.id.top_rated) { 
       return true; 
      } 

      return super.onOptionsItemSelected(item); 
     } 
    } 

Adaptateur:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> { 

    private static final String TAG = RecyclerViewAdapter.class.getSimpleName(); 
    ArrayList<MovieItem> mMoviesItems; 
    private Context context; 

    public RecyclerViewAdapter(ArrayList<MovieItem> MoviesItems) { 
     mMoviesItems = MoviesItems; 
    } 



    @Override 
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     context = viewGroup.getContext(); 
     int layoutIdForListItem = R.layout.movie_list_item; 
     LayoutInflater inflater = LayoutInflater.from(context); 
     boolean shouldAttachToParentImmediately = false; 

     View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately); 
     RecyclerViewHolder viewHolder = new RecyclerViewHolder(view); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
     holder.MoviePopularity.setText(String.valueOf(mMoviesItems.get(position).getPopularity())); 
     Picasso.with(this.context).load(mMoviesItems.get(position).getPhoto()).into(holder.MoviePoster); 
     holder.MovieName.setText(mMoviesItems.get(position).getName()); 
    } 

    @Override 
    public int getItemCount() { 
     return mMoviesItems.size(); 
    } 

    class RecyclerViewHolder extends RecyclerView.ViewHolder { 

     TextView MoviePopularity; 
     ImageView MoviePoster; 
     TextView MovieName; 

     public RecyclerViewHolder(View itemView) { 
      super(itemView); 
      MoviePopularity = (TextView)itemView.findViewById(R.id.movie_popularity); 
      MoviePoster = (ImageView)itemView.findViewById(R.id.iv_item_movie); 
      MovieName = (TextView)itemView.findViewById(R.id.movie_name); 
     } 
    } 
} 

aussi sur la private static final ArrayList<MovieItem> NUM_MOVIES = ; quand j'utilise int je viens d'utiliser un certain nombre, mais maintenant avec arraylist que dois-je faire

+0

Je ne comprends pas ... Quel est votre problème? –

+0

mon prob est onPostExecute() que dois-je utiliser au lieu de append, car il me donne l'erreur – user8043603

+0

Publiez votre erreur et le code postal de l'adaptateur –

Répondre

0

C'est parce que vous essayez d'utiliser une méthode qui n'existait pas pour la classe.

Dans votre code source, vous définissez mMoviesList comme RecyclerView:

RecyclerView mMoviesList; 

Ensuite, vous effectuez les opérations suivantes:

protected void onPostExecute(ArrayList<MovieItem> movieData) { 
    if (movieData != null) { 
    for (MovieItem movie : movieData) { 
     mMoviesList.append((movie) + "\n\n\n"); 
    } 
    } 
} 

Il n'y a pas de méthode append dans RecyclerView

+0

alors que dois-je faire pouvez-vous guider pour que – user8043603

+0

vous devez ajouter les données de film à votre arraylist –