图片未显示在 RecyclerView 中

Images not displayed in RecyclerView

我想在我的应用程序中将来自 URL 的图像显示为图库。 这个我参考过

http://www.androidhive.info/2016/04/android-glide-image-library-building-image-gallery-app/

但是没有显示图像。

这是我的 GalleryActivity

public class GalleryActivity extends AppCompatActivity {

String strServerResponse;
ProgressDialog nDialog;
private GalleryAdapter mAdapter;
private RecyclerView recyclerView;
private ArrayList<Image> images;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gallery);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    images = new ArrayList<>();

    new NetCheck().execute();

}


private class NetCheck extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        nDialog = new ProgressDialog(GalleryActivity.this);
        nDialog.setMessage("Loading..");
        nDialog.setTitle("Please Wait");
        nDialog.setIndeterminate(false);
        nDialog.setCancelable(true);
        nDialog.show();
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        Log.e("Post exec calleld", "dfds");
        nDialog.dismiss();


        mAdapter = new GalleryAdapter(getApplicationContext(), images);

        RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(), 2);
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);

    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        try {

            HttpClient httpClient = new DefaultHttpClient();


            HttpPost httpRequest = new HttpPost(
                    uril);
            httpRequest.setHeader("Content-Type", "application/json");

            JSONObject json = new JSONObject();

            StringEntity se = new StringEntity(json.toString());
            se.setContentEncoding("UTF-8");
            se.setContentType("application/json");
            httpRequest.setEntity(se);
            HttpResponse httpRes = httpClient.execute(httpRequest);
            java.io.InputStream inputStream = httpRes.getEntity()
                    .getContent();
            InputStreamReader inputStreamReader = new InputStreamReader(
                    inputStream);
            BufferedReader reader = new BufferedReader(inputStreamReader);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            inputStream.close();
            strServerResponse = sb.toString();
            Log.e("Server Response", "" + strServerResponse.toString());
            if (strServerResponse != null) {
                try {

                    JSONObject jsonObj = new JSONObject(strServerResponse);
                    String status = jsonObj.getString("status");

                    if (status.equals("true")) {
                        String result = jsonObj.getString("images");
                        Log.e("images", "" + eee);
                        JSONArray arr1 = new JSONArray(result );
                        JSONObject jsonObj1 = arr1.getJSONObject(0);

                        Image image = new Image();
                        for (int i = 0; i < arr1.length(); i++) {

                            JSONObject jobjj11 = arr1
                                    .getJSONObject(i);

                            String name = jobjj11.optString("name");


                            Log.e("nurl",""+name);

                            image.setSmall(""+name);
                            images.add(image);
                            Log.e("images.tostring",""+images.toString());

                        }

                    }

                    else if (status.equals("false")){
                        Handler handler = new Handler(Looper.getMainLooper());
                        handler.post(
                                new Runnable() {
                                    @Override
                                    public void run() {
                                        AlertDialog alertDialog = new AlertDialog.Builder(
                                                GalleryActivity.this).create();
                                        alertDialog.setMessage("No imagesFound");
                                        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int which) {
                                            }
                                        });

                                        alertDialog.show();
                                    }
                                }
                        );
                    }


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {

                Handler handler = new Handler(Looper.getMainLooper());
                handler.post(
                        new Runnable() {
                            @Override
                            public void run() {
                                AlertDialog alertDialog = new AlertDialog.Builder(
                                        GalleryActivity.this).create();
                                alertDialog.setMessage("Error Connecting to Server");
                                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                    }
                                });

                                alertDialog.show();
                            }
                        });
                //Log.e("ServiceHandler", "Couldn't get any data from the url");

            }

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (ClientProtocolException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return null;

    }
}

这是我的 GalleryAdapter

public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.MyViewHolder> {

private List<Image> images;
private Context mContext;

public class MyViewHolder extends RecyclerView.ViewHolder {


    public ImageView thumbnail;

    public MyViewHolder(View view) {
        super(view);
        thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
    }
}


public GalleryAdapter(Context context, List<Image> images) {
    Log.e("ingalleryadapter", "aaddd");
    mContext = context;
    this.images = images;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.gallery_thumbnail, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Image image = images.get(position);

    Glide.with(mContext).load(image.getSmall())
            .thumbnail(0.5f)
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(holder.thumbnail);
}

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

public interface ClickListener {
    void onClick(View view, int position);

    void onLongClick(View view, int position);
}

public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

    private GestureDetector gestureDetector;
    private GalleryAdapter.ClickListener clickListener;

    public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final GalleryAdapter.ClickListener clickListener) {
        this.clickListener = clickListener;
        gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                if (child != null && clickListener != null) {
                    clickListener.onLongClick(child, recyclerView.getChildPosition(child));
                }
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

        View child = rv.findChildViewUnder(e.getX(), e.getY());
        if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
            clickListener.onClick(child, rv.getChildPosition(child));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    }

}
}

图片没有显示。这里有什么问题?

尝试添加对 override() 的调用,看看能否解决问题。发生这种情况的一种常见方式是,如果您使用的视图没有固定大小 and/or 取决于其内容的大小。 Glide 尝试等待,直到没有固定大小的视图通过布局。在某些情况下,视图最终等待 Glide,而 Glide 最终等待视图,导致加载静默地永远不会开始。

如果覆盖有效,请考虑在您的视图中使用固定大小,或者将您的 xml 粘贴到此处,以便我们可以尝试建议其他替代方案。

Glide
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[0])
    .override(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio
    .into(imageViewResize);

更多详情请访问:Images fail to load in recyclerview #482

检查图片列表是否有值。通过在 getItemCount() 方法中放置一个日志来检查并检查图像列表的大小。

我对 Glide 也有类似的问题。我有两种方法可以使情况好得多。 1. 添加holder.itemview.setTag("smthng unique") 因为Glide 使用tag 来建立关系。 2.调整你的图片大小,如果图片的像素量很大,有时会加载不出来,所以你需要降级像素。 我希望这对你有用。