2017-10-12 60 views
0

我使用它的適配器爲recycleview的主要活動編寫代碼並從json數據獲取數據,所以我的問題是關於onPostExecute() 我在字符串之前使用過,因此我使用了.append和一切正常,現在我用一個ArrayList首次有啥我的功能問題onPostExecute ArrayList

主要活動:

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); 
     } 
    } 

適配器:

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); 
     } 
    } 
} 

也關於private static final ArrayList<MovieItem> NUM_MOVIES = ; 當我使用int我只是使用任何數字,但現在與arraylist我該怎麼辦

+0

我不明白...你有什麼問題? –

+0

我的問題是onPostExecute()我應該使用什麼,而不是追加,因爲它給我錯誤 – user8043603

+0

發佈您的錯誤和適配器的郵政編碼 –

回答

0

這是因爲你試圖使用一種方法,不存在的類。

在你的源代碼,可以定義爲mMoviesList RecyclerView

RecyclerView mMoviesList; 

然後你嘗試以下方法:

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

沒有append方法RecyclerView

+0

所以我應該怎麼做,你可以指導你的 – user8043603

+0

你應該添加電影數據到你的數組列表 –