Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android-asynctask – 带有asyncTask的Recyclerview适配器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用RecyclerView的@L_874_0@适配器,但持有者是空的.我无法理解我错过了什么.请帮忙.

在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结果…

解决方法

您收到的数据,已保存在列表中 – > movieList.
您是否在适配器中使用它并将适配器设置为recycler视图.

>在主类中初始化回收器视图
>初始化适配器并将movielist作为arguement传递给创建的适配器对象.
>将适配器连接到recyclerview – > recyclerView.setAdapter(适配器).

我认为这应该有效

大佬总结

以上是大佬教程为你收集整理的android-asynctask – 带有asyncTask的Recyclerview适配器全部内容,希望文章能够帮你解决android-asynctask – 带有asyncTask的Recyclerview适配器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。