2016-07-29 28 views
2

私はRecyclerViewに画像を表示したいので、drawableの画像を使用します。私はコードの下に書きますが、私は、このエラーを示しています。
ドロアブルからAndroidの画像ビューに画像を設定する方法

java.lang.IllegalArgumentException: Unknown type class [I. You must provide a Model of a type for which there is a registered ModelLoader, if you are using a custom model, you must first call Glide#register with a ModelLoaderFactory for your custom model class 
at com.bumptech.glide.RequestManager.loadGeneric(RequestManager.java:629) 
at com.bumptech.glide.RequestManager.load(RequestManager.java:598) 
at com.tellfa.colony.Adapters.ColoniesAdapter.onBindViewHolder(ColoniesAdapter.java:66) 
at com.tellfa.colony.Adapters.ColoniesAdapter.onBindViewHolder(ColoniesAdapter.java:29) 
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5768) 
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5801) 
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5037) 
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4913) 
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029) 
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414) 
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377) 
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578) 
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3260) 
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3069) 
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3518) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1705) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1559) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1468) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1705) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1559) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1468) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
at android.view.View.layout(View.java:15631) 
at android.view.ViewGroup.layout(ViewGroup.java:4966) 
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2101) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1858) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1077) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5845) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
at android.view.Choreographer.doFrame(Choreographer.java:550) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5272) 
at java.lang.reflect.Method.invoke(Native Method) 
at jav 

モデルコード:

public class MainDataModel implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private String category; 
    private String categoryID; 
    private String categoryDescription; 
    private int[] categoryImages; 

    private TimeInterpolator interpolator; 

    public MainDataModel(String categoryID, String category, String categoryDescription, int[] categoryImages, 
         TimeInterpolator interpolator) { 
     this.categoryID = categoryID; 
     this.category = category; 
     this.categoryDescription = categoryDescription; 
     this.categoryImages = categoryImages; 
     this.interpolator = interpolator; 
    } 

    public String getCategory() { 
     return category; 
    } 

    public void setCategory(String category) { 
     this.category = category; 
    } 

    public String getCategoryID() { 
     return categoryID; 
    } 

    public void setCategoryID(String caategoryID) { 
     this.categoryID = caategoryID; 
    } 

    public String getCategoryDescription() { 
     return categoryDescription; 
    } 

    public void setCategoryDescription(String categoryDescription) { 
     this.categoryDescription = categoryDescription; 
    } 

    public TimeInterpolator getInterpolator() { 
     return interpolator; 
    } 

    public void setInterpolator(TimeInterpolator interpolator) { 
     this.interpolator = interpolator; 
    } 

    public int[] getCategoryImages() { 
     return categoryImages; 
    } 

    public void setCategoryImages(int[] categoryImages) { 
     this.categoryImages = categoryImages; 
    } 

} 

AsyncTaskコードや設定画像:

public class ColoniesDataInfo { 

    private static Context mContext; 
    private String ServerAddress = ServerIP_colonies.getColoniesIP(); 

    public void getColoniesDataInfo(Context context) { 
     mContext = context; 
     new getInfo().execute(ServerAddress); 
    } 

    private class getInfo extends AsyncTask<String, Void, String> { 
     EventBus bus = EventBus.getDefault(); 
     private String ou_response; 
     private List<MainDataModel> infoModels; 

     @Override 
     protected void onPreExecute() { 
      CustomProcessDialog.createAndShow(mContext); 
      infoModels = new ArrayList<>(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      OkHttpClient client = new OkHttpClient(); 

      //String url = (String) params[0]; 
      Request request = new Request.Builder() 
        .url(ServerAddress) 
        //.cacheControl(CacheControl.FORCE_NETWORK) 
        .build(); 

      Response response; 
      try { 
       response = client.newCall(request).execute(); 
       ou_response = response.body().string(); 
       response.body().close(); 
       if (ou_response != null) { 
        try { 
         JSONObject postObj = new JSONObject(ou_response); 
         JSONArray postsArray = postObj.optJSONArray("categories"); 
         infoModels = new ArrayList<>(); 

         for (int i = 0; i <= infoModels.size(); i++) { 
          JSONObject postObject = (JSONObject) postsArray.get(i); 

          String colID = postObject.getString("id"); 
          String colTitle = postObject.getString("title"); 
          String colDescription = postObject.getString("description"); 

          final int[] colImages = { 
            R.drawable.colonies_image_food, 
            R.drawable.colonies_image_medical, 
            R.drawable.colonies_image_tecgnolegy, 
            R.drawable.colonies_image_entertenement, 
            R.drawable.colonies_image_car, 
            R.drawable.colonies_image_model, 
            R.drawable.colonies_image_sport, 
          }; 

          Log.d("Data", "Colonies ID: " + colID); 
          Log.d("Data", "Colonies title: " + colTitle); 
          Log.d("Data", "Colonies Desc: " + colDescription); 
          Log.d("Data", "---------------------------------"); 

          //Use the title and id as per your requirement 
          infoModels.add(new MainDataModel(colID, colTitle, colDescription, colImages, 
            Utils.createInterpolator(Utils.BOUNCE_INTERPOLATOR))); 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return ou_response; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      CustomProcessDialog.dissmis(); 
      if (result != null) { 
       bus.post(infoModels); 
      } else { 
       Toast.makeText(mContext, "Empty", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

アダプタのコードをとアダプターに画像を設定:

public class ColoniesAdapter extends RecyclerView.Adapter<ColoniesAdapter.ViewHolder> { 

    private List<MainDataModel> mDateSet; 
    private Context mContext; 
    private SparseBooleanArray expandState = new SparseBooleanArray(); 

    public ColoniesAdapter(Context context, List<MainDataModel> dataSet) { 
     this.mContext = context; 
     this.mDateSet = dataSet; 
     for (int i = 0; i < mDateSet.size(); i++) { 
      expandState.append(i, false); 
     } 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(mContext).inflate(R.layout.colonies_row, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 

     holder.colonies_title.setText(mDateSet.get(position).getCategory()); 
     holder.colonies_title.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int pos = holder.getPosition(); 
       MainDataModel model = mDateSet.get(pos); 
       v.getContext().startActivity(new Intent(v.getContext(), Category_page.class) 
         .putExtra("categoryTitle", model.getCategory()) 
         .putExtra("categoryID", model.getCategoryID())); 
      } 
     }); 

     Glide.with(mContext) 
       .load(mDateSet.get(position).getCategoryImages()) 
       .placeholder(R.drawable.post_image) 
       .crossFade() 
       .override(700, 400) 
       .into(holder.colonies_image); 
     holder.colonies_description.setText(mDateSet.get(position).getCategoryDescription()); 

     holder.expandableLayout.setInterpolator(mDateSet.get(position).getInterpolator()); 
     holder.expandableLayout.setExpanded(expandState.get(position)); 
     holder.expandableLayout.setListener(new ExpandableLayoutListenerAdapter() { 
      @Override 
      public void onPreOpen() { 
       createRotateAnimator(holder.buttonLayout, 0f, 180f).start(); 
       expandState.put(position, true); 
      } 

      @Override 
      public void onPreClose() { 
       createRotateAnimator(holder.buttonLayout, 180f, 0f).start(); 
       expandState.put(position, false); 
      } 
     }); 
     holder.buttonLayout.setRotation(expandState.get(position) ? 180f : 0f); 
     holder.buttonLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(final View v) { 
       onClickButton(holder.expandableLayout); 
      } 
     }); 
    } 

    private void onClickButton(final ExpandableLayout expandableLayout) { 
     expandableLayout.toggle(); 
    } 

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

    public void remove(int position) { 
     mDateSet.remove(position); 
     notifyItemRemoved(position); 
    } 

    public void clear() { 
     mDateSet.clear(); 
     notifyDataSetChanged(); 
    } 


    public void add(List<MainDataModel> models) { 
     mDateSet.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public void update(List<MainDataModel> models) { 
     mDateSet.clear(); 
     mDateSet.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 

     private TextView colonies_title, colonies_description; 
     private ImageView colonies_image; 
     private ExpandableLinearLayout expandableLayout; 
     private RelativeLayout buttonLayout; 

     public ViewHolder(View itemView) { 
      super(itemView); 

      colonies_title = (TextView) itemView.findViewById(R.id.colonies_colony_title_text); 
      colonies_image = (ImageView) itemView.findViewById(R.id.colonies_cover_image); 

      colonies_description = (TextView) itemView.findViewById(R.id.colonies_expandable_description_text); 

      buttonLayout = (RelativeLayout) itemView.findViewById(R.id.colonies_expandable_button); 
      expandableLayout = (ExpandableLinearLayout) itemView.findViewById(R.id.colonies_expandable_layout); 

      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 


/*     v.getContext().startActivity(new Intent(v.getContext(), PostShow_page.class) 
          .putExtra("title", model.getTitle()) 
          .putExtra("image", model.getThumbnail()));*/ 
       } 
      }); 
     } 
    } 

    public ObjectAnimator createRotateAnimator(final View target, final float from, final float to) { 
     ObjectAnimator animator = ObjectAnimator.ofFloat(target, "rotation", from, to); 
     animator.setDuration(300); 
     animator.setInterpolator(Utils.createInterpolator(Utils.LINEAR_INTERPOLATOR)); 
     return animator; 
    } 
} 

どうすれば修正できますか?

答えて

3

まず、すべての画像の配列を1つのimageViewに読み込むのはなぜですか?あなたのメソッドgetCategoryImages()はあなたにイメージの整数配列を与えます。その位置に対応する1つずつ検索する。

は、問題はまだあなたが同じ問題

https://github.com/bumptech/glide/issues/588

Glide.with(mContext) 
      .load(mDateSet.get(position).getCategoryImages()[position]) 
      .placeholder(R.drawable.post_image) 
      .crossFade() 
      .override(700, 400) 
      .into(holder.colonies_image); 
+0

私にコードを送ることができますか? –

+0

上記のコードブロックを確認してください。私は私の答えを編集しました –

+0

あなたareeeeeeeeeeeeeeeeベスト<3。友よ、ありがとう。ありがとうございます<3 –

1

intのリストを読み込もうとしています。そのため、グライドが動作しません。 宛先としてImageViewを指定したので、そこには1つの画像のみを読み込むことができます。 あなたがする必要があるのは、ロードする画像を抽出し、それをGlideに渡すことです。

+0

と、下のリンクをどのようにすることができ、これを参照することができます解決しない場合は?あなたは私にコードを送ることができますか? –

関連する問題