2016-04-28 3 views
2

Я хочу отображать изображения из URL-адреса в своем приложении в виде галереи. Я использовал это для справки.Изображения не отображаются в RecyclerView

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

} 
} 

не отображаются изображения. Что здесь не так?

+0

Проверьте свой URL-адрес, который существует или нет, попробуйте использовать placeholderimage – USKMobility

+0

@USKМобильность, которую я проверил. URL существует. – Priyanka

+0

Отметьте [this] (http://stackoverflow.com/questions/28992929/recyclerview-not-calling-oncreateviewholder-or-onbindview), [это] (http://stackoverflow.com/questions/32463236/recyclerview-adapters -oncreateviewholder-and-onbindviewholder-methods-are-not-g) и [this] (http://stackoverflow.com/questions/28115553/recyclerview-not-call-any-adapter-method-oncreateviewholder-onbindviewholder) –

ответ

1

Попробуйте добавить вызов переопределить() и посмотреть, исправляет ли он это. Один из распространенных способов это происходит, если вы используете представления, которые не имеют фиксированных размеров и/или зависят от размера их содержимого. 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

+0

Спасибо .. Я пробовал это, но все еще не работает – Priyanka

+0

onBindViewHolder не получает вызов – Priyanka

0

Проверьте список изображений значения. проверьте, поместив журнал в метод getItemCount() и проверьте размер списка изображений.

0

У меня была аналогичная проблема с Glide. У меня было 2 подхода, которые сделали ситуацию намного лучше. 1. Добавьте holder.itemview.setTag("smthng unique"), потому что Glide использует тег, чтобы сделать отношение. 2. Измените размер изображений, если изображение имеет огромное количество пикселей, оно иногда не загружается, поэтому вам нужно понизить пиксели. Надеюсь, это сработает для вас.

Смежные вопросы