2015-12-01 3 views
0

У меня есть фрагмент под названием «RecyclerTab1», который содержит макет recyclerview. «HomeManager» - это адаптер recyclerview. В этом адаптере recyclerview я использовал Glide для загрузки изображений из папки с возможностью переноса. для запуска программы я получаю ошибку java.lang.IllegalArgumentException: .Я также включен класс RecyclerTab1 и адаптер HomeManager для recyclerviewошибка при загрузке изображений в recyclerView с использованием glide

RecyclerTab1:

package com.example.root5solutions.mirrealtors.hometabfragments; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import com.example.root5solutions.mirrealtors.HomeRecyclerDetailActivity; 
import com.example.root5solutions.mirrealtors.R; 
import com.example.root5solutions.mirrealtors.projectdatabase.HomeManager; 
import com.example.root5solutions.mirrealtors.projectdatabase.HomeData; 
import com.example.root5solutions.mirrealtors.projectdatabase.RecyclerClickListener; 
import com.kogitune.activity_transition.ActivityTransitionLauncher; 

public class RecyclerTab1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.home_tab1_recycler, container, false); 
     RecyclerView rv = (RecyclerView) v.findViewById(R.id.home_recyclerview); 
     LinearLayoutManager llm = new LinearLayoutManager(getContext()); 
     rv.setLayoutManager(llm); 
     rv.smoothScrollToPosition(View.SCROLLBAR_POSITION_DEFAULT); 
     rv.setHasFixedSize(true); // to improve performance 
     rv.setAdapter(new HomeManager(getContext())); // the projectdatabase manager is assigner to the RV 

     rv.addOnItemTouchListener(// and the click is handled 
       new RecyclerClickListener(getContext(), new RecyclerClickListener.OnItemClickListener() { 
        @Override 
        public void onItemClick(View view, int position) { 
         Intent intent = new Intent(getActivity(), HomeRecyclerDetailActivity.class); 
         intent.putExtra(HomeRecyclerDetailActivity.ID, HomeData.PROJECTS[position].getId()); 
         ActivityTransitionLauncher.with(getActivity()).from(view).launch(intent); 
        } 
       })); 
     return v; 
    } 
} 

HomeManager:

package com.example.root5solutions.mirrealtors.projectdatabase; 

import android.content.Context; 
import android.support.design.widget.Snackbar; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CheckBox; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.engine.DiskCacheStrategy; 
import com.example.root5solutions.mirrealtors.R; 


public class HomeManager extends RecyclerView.Adapter<HomeManager.RecyclerViewHolder> { 
    private Context context; 
public HomeManager(Context context){ 
    this.context=context; 
} 
    public static class RecyclerViewHolder extends RecyclerView.ViewHolder { 

     TextView mProjectName, mProjectCity, mProjectType; 
     ImageView mImage; 
     CheckBox mCheck; 
     RelativeLayout mProjectStatus; 


     RecyclerViewHolder(View itemView) { 
      super(itemView); 
      mProjectName = (TextView) itemView.findViewById(R.id.PROJECT_name); 
      mProjectCity = (TextView) itemView.findViewById(R.id.PROJECT_city); 
      mProjectType = (TextView) itemView.findViewById(R.id.PROJECT_type); 
      mImage = (ImageView) itemView.findViewById(R.id.PROJECT_image); 
      mCheck = (CheckBox) itemView.findViewById(R.id.PROJECT_fav); 
      mProjectStatus = (RelativeLayout) itemView.findViewById(R.id.label); 
     } 
    } 

    @Override 
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false); 
     return new RecyclerViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) { 
     // get the single element from the main array 

     final HomeData projects = HomeData.PROJECTS[i]; 
     // Set the values 
     viewHolder.mProjectName.setText(projects.get(HomeData.Field.NAME)); 
     viewHolder.mProjectCity.setText(projects.get(HomeData.Field.CITY)); 
     viewHolder.mProjectType.setText(projects.get(HomeData.Field.TYPE)); 
     viewHolder.mImage.setImageResource(projects.geti(HomeData.Field.IMAGE)); 
     viewHolder.mCheck.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Snackbar snackbar = Snackbar.make(v, "Item Favorited", Snackbar.LENGTH_SHORT); 
       snackbar.show(); 
      } 
     }); 

     Glide.with(context) 
       .load(Gallery_Constants.IMAGES) 
       .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
       .into(viewHolder.mImage); 
     if (projects.get(HomeData.Field.STATUS) == "FOR SALE") { 
      viewHolder.mProjectStatus.setBackgroundResource(R.drawable.labelsale); 
     } else if (projects.get(HomeData.Field.STATUS) == "SOLD OUT") { 
      viewHolder.mProjectStatus.setBackgroundResource(R.drawable.labelsold); 
     } 

    } 


    @Override 
    public int getItemCount() { 

     return HomeData.PROJECTS.length; 
    } 


} 

Logcat:

12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime: FATAL EXCEPTION: main 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime: Process: com.example.root5solutions.mirrealtors, PID: 8509 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime: java.lang.IllegalArgumentException: Unknown type class [Ljava.lang.String;. 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 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at com.bumptech.glide.RequestManager.loadGeneric(RequestManager.java:629) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at com.bumptech.glide.RequestManager.load(RequestManager.java:598) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at com.example.root5solutions.mirrealtors.projectdatabase.HomeManager.onBindViewHolder(HomeManager.java:68) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at com.example.root5solutions.mirrealtors.projectdatabase.HomeManager.onBindViewHolder(HomeManager.java:19) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5212) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5245) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4483) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1627) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1037) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:747) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1133) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:760) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.View.layout(View.java:15686) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.view.ViewGroup.layout(ViewGroup.java:5107) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime:  at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
12-01 12:30:17.368 8509-8509/com.example.root5solutions.mirrealtors E/AndroidRuntime: at android.view.View.layout(View 

ответ

0

Glide предоставляет так много .with() методы причины: следует жизненный цикл.

Представьте фрагмент, который динамически добавляется в Activity. В методе onCreateView он запускает загрузку Glide изображения 3 МБ. Теперь, что, если пользователь нажимает кнопку «Назад», а фрагмент удаляется или вся активность закрыта?

  1. Если вы используете с (getActivity(). GetApplicationContext()) ничего не произойдет, все 3MBs данных загружается и затем декодируется, кэшируется, , возможно, даже установить в ImageView, который затем мусора , , потому что единственная ссылка на него была от внутренних элементов Glide.

  2. Если вы используете с ((фрагмент) этого) Скольжение при подписке событий жизненного цикла фрагмента и как только остановлен фрагмент, выдающийся запрос любой должен быть приостановлен; и при уничтожении всех ожидающих запросов будут удалены. Это означает, что загрузка изображения будет остановить на полпути, и больше не будет использоваться этими мертвецами Фрагмент.

  3. Если вы используете с (getActivity()) Glide поддерживает событий жизненного цикла своей деятельности и то же самое происходит, как описано выше, но только тогда, когда Активности остановлен или уничтожены. Поэтому наилучшей практикой является использование ближайшего возможного контекста/фрагмента, чтобы избежать неиспользуемого запроса доработок.

Надеется, что это помогает ..

1

вы получите сообщение об ошибке, как это:

IllegalArgumentException: Unknown type class [Ljava.lang.String; 

это, вероятно, обеспечивает String [] в Glide.load().

пожалуйста, проверьте здесь:

Glide.with(context) 
      .load(Gallery_Constants.IMAGES) 
      .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
      .into(viewHolder.mImage); 

убедитесь, что тип из Gallery_Constants.IMAGES правильно.

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