2016-04-28 10 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が存在するかどうかを確認し、プレースホルダ画像 – USKMobility

+0

を使用してみてください。@USKMobility私はチェックしました。 URLが存在します。 – Priyanka

+0

[これ](http://stackoverflow.com/questions/28992929/recyclerview-not-calling-oncreateviewholder-or-onbindview)[this(http://stackoverflow.com/questions/32463236/recyclerview-adapters) -oncreateviewholder-and-onbindviewholder-methods-not-g)と[this](http://stackoverflow.com/questions/28115553/recyclerview-not-call-any-adapter-method-oncreateviewholder-onbindviewholder) –

答えて

1

override()の呼び出しを追加して、それが修正されているかどうかを確認してください。これが一般的な方法の1つは、サイズが固定されていないビューやコンテンツのサイズに依存しているビューを使用している場合です。グライドは、一定のサイズを持たないビューがレイアウトを通過するまで待つことを試みます。場合によっては、ビューがグライドを待って終了し、グライドがビューを待ってしまい、自動的にロードが開始されることはありません。

オーバーライドが有効な場合は、ビュー内で固定サイズを使用するか、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

グライドにも同様の問題がありました。私は状況をより良くした2つのアプローチを持っていました。 1. Glideがタグを使用して関係を作成するため、holder.itemview.setTag("smthng unique")を追加します。 2.イメージのサイズを変更すると、イメージのピクセル数が膨大な場合、ピクセルがダウングレードされるように読み込まれないことがあります。 これがうまくいくことを願っています。

関連する問題