2015-10-15 97 views
4

我試圖使用自定義適配器RecyclerView,但持有者是空的。我不明白我錯過了什麼。請幫忙。帶有asyncTask的Recyclerview適配器

在MainActivity的的AsyncTask:

@Override 
    protected void onPostExecute(String result) { 
     json_result = result; 
     super.onPostExecute(result); 
     dialog.dismiss(); 
     if (result == null) { 
      Toast.makeText(MainActivity.this, "error getting results...", Toast.LENGTH_LONG).show(); 

     } else { 

      try { 
       JSONObject json = new JSONObject(result); 
       Log.e(TAG, "create json object"); 

       JSONArray searchArray = json.getJSONArray("Search"); 
       Log.e(TAG, "Search"); 

       for (int i = 0; i < searchArray.length(); i++) { 
        Log.e(TAG, "run on length"); 
        JSONObject searchObject = searchArray.getJSONObject(i); 
        Log.e(TAG, "create search object"); 
        String title = searchObject.getString("Title"); 
        Log.e(TAG, "Title" + title); 
        String type = searchObject.getString("Type"); 
        Log.e(TAG, "Type" + type); 
        String year = searchObject.getString("Year"); 
        Log.e(TAG, "Year" + year); 
        String imdbID = searchObject.getString("imdbID"); 
        String poster = searchObject.getString("Poster"); 
        Log.e(TAG, "" + result); 
        movieList.add(new Movie(title, type, year, imdbID, poster)); 
        Log.e(TAG, "Add to adapter"); 


       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(MainActivity.this, "error parsing results...", Toast.LENGTH_LONG).show(); 
      } 

      adapter.notifyDataSetChanged(); 
      Log.e(TAG, "Notify"); 

     } 
    } 

自定義適配器:

public class Adapter extends 
    RecyclerView.Adapter<Adapter.ViewHolder> { 
private LruCache<String, Bitmap> bitmapCache; 
Context context; 


public static class ViewHolder extends RecyclerView.ViewHolder { 
    public TextView title; 
    public TextView year; 
    public TextView type; 
    public ImageView poster; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.txt_title); 
     year = (TextView) itemView.findViewById(R.id.txt_year); 
     type = (TextView) itemView.findViewById(R.id.txt_rating); 
     poster = (ImageView) itemView.findViewById(R.id.imageView); 

    } 

} 

private List<Movie> mList; 

public Adapter(List<Movie> mList) { 
    this.mList = mList; 
    int numImages = 4 * 1024 * 1024; 
    this.bitmapCache = new LruCache<String, Bitmap>(numImages) { 
     @Override 
     protected int sizeOf(String key, Bitmap value) { 
      // this is how to calculate a bitmap size in bytes. 
      // (bytes-in-a-row * height) 
      return value.getRowBytes() * value.getHeight(); 
     } 
    }; 
} 

@Override 
public Adapter.ViewHolder onCreateViewHolder 
     (ViewGroup parent, int viewType) { 
    Context context = parent.getContext(); 
    LayoutInflater inflater = LayoutInflater.from(context); 
    View movieView = inflater.inflate(R.layout.card_view, parent, false); 
    ViewHolder viewHolder = new ViewHolder(movieView); 




    return viewHolder; 
} 

@Override 
public void onBindViewHolder 
     (Adapter.ViewHolder holder, int position) { 
    Movie movie = mList.get(position); 
    holder.title.setText(movie.getTitle()); 
    holder.year.setText(movie.getYear()); 
    holder.type.setText(movie.getType()); 
    holder.poster.setVisibility(View.INVISIBLE); 
    GetImageTask task = new GetImageTask(movie, holder); 
    task.execute(movie.getPoster_url()); 

} 

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

class GetImageTask extends AsyncTask<String, Void, Bitmap> { 


    private final Movie movie; 
    private final ViewHolder holder; 

    public GetImageTask(Movie movie, ViewHolder holder) { 
     this.movie = movie; 
     this.holder = holder; 
    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     //download: 
     String address = params[0]; 
     Bitmap bitmap = HttpHandler.getBitmap(address, null); 

     //save it in the cache for later: 
     if (bitmap != null) { 
      bitmapCache.put(address, bitmap); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 

     if (movie.equals(holder.poster)) { 
      holder.poster.setVisibility(View.VISIBLE); 
      holder.poster.setImageBitmap(result); 
     } 
    } 
} 

}

我認爲問題是,我的電影類是空的,但我有在的AsyncTask JSON結果...

+1

Udacity課程吧? = d –

回答

3

您收到的數據,您保存在列表中 - - > movieList。 您是否在適配器中使用過它,並將適配器設置爲回收站視圖。在主類

  1. 初始化回收視圖
  2. 初始化適配器並通過movielist作爲arguement創建適配器對象。
  3. 將適配器附加到recyclerview - > recyclerView.setAdapter(適配器)。

我認爲這應該工作