【问题标题】:Picasso recycle view retrofit 2 in grid view网格视图中的毕加索回收视图改造 2
【发布时间】:2017-08-16 11:36:23
【问题描述】:

主类:

recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2);
        recyclerView.setLayoutManager(layoutManager);

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://192.168.0.2/littlezebra/scripts/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

            login service = retrofit.create(login.class);


            Call<dashboard> call = service.dash();

            call.enqueue(new Callback<dashboard>() {
                @Override
                public void onResponse(Call<dashboard> call, Response<dashboard> response) {

                  dashboard  dashboard = response.body();
                    data = new ArrayList<>(Arrays.asList(dashboard. getDashboard_info()));
                    adapter = new DataAdapter(data,context);
                    recyclerView.setAdapter(adapter);

                }

适配器类:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private ArrayList<dashboard.Dashboard_info> android;
    private Context context;

    public DataAdapter(ArrayList<dashboard.Dashboard_info> android,Context context) {
        this.android = android;
        this.context = context;
    }


    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

        viewHolder.tv_name.setText(android.get(i).getId());
        Picasso.with(context).load(android.get(i)
                .getWeek_image())
                .resize(250,200) //to resize Image
                .into(viewHolder.img_android);
        viewHolder.tv_api_level.setText(android.get(i).getWeek_name());
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView tv_name;
        private ImageView img_android;
        private TextView tv_api_level;
        public ViewHolder(View view) {
            super(view);

            tv_name = (TextView)view.findViewById(R.id.tv_name);
            img_android = (ImageView) view.findViewById(R.id.img_android);
            tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);

        }
    }

流程:

com.example.admin.myappl,PID:5047 java.lang.IllegalArgumentException:上下文不能为空。在 com.squareup.picasso.Picasso$Builder.(Picasso.java:701) 在 com.squareup.picasso.Picasso.with(Picasso.java:662) 在 com.example.admin.myappl.Adapter.DataAdapter.onBindViewHolder( DataAdapter.java:37) 在 com.example.admin.myappl.Adapter.DataAdapter.onBindViewHolder(DataAdapter.java:18) 在 android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6400) 在 android .support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6433) 在 android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5377) 在 android.support.v7.widget.RecyclerView $Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5640) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5482) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java :5478) 在 android.support.v7.widget.Grid 的 android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2215) LayoutManager.layoutChunk(GridLayoutManager.java:556) 在 android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1502) 在 android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595) 在 android .support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) 在 android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3625) 在 android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView .java:3354) 在 android.view.ViewGroup.layout(ViewGroup. java:5754) 在 android.widget.RelativeLayout.onLayout(RelativeLayout.java:1189) 在 android.view.View.layout(View.java:17838) 在 android.view.ViewGroup.layout(ViewGroup.java:5754) 在android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) 在 android.support.design.widget.ViewOffsetBehavior.on LayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1389) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:868) at android .view.View.layout(View.java:17838) 在 android.view.ViewGroup.layout(ViewGroup.java:5754) 在 android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1192) 在 android。 view.View.layout(View.java:17838) at android.view.ViewGroup.layout(ViewGroup.java:5754) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383) at android.widget.FrameLayout.onLayout (FrameLayout.java:321) 在 android.view.View.layout(View.java:17838) 在 android.view.ViewGroup.layout(ViewGroup.java:5754) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java: 1982) 在 android.view.View.layout(View.java:17838) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1735) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826) 在 android.视图.Vi ewGroup.layout(ViewGroup.java:5754) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383) at android.widget.FrameLayout.onLayout(FrameLayout.java:321) at android.view.View.layout(View .java:17838) 在 android.view.ViewGroup.layout(ViewGroup.java:5754) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)在 android.widget.LinearLayout.onLayout(LinearLayout.java:1735) 在 android.view.View.layout(View.java:17838) 在 android.view.ViewGroup.layout(ViewGroup.java:5754) 在 android.widget。 FrameLayout.layoutChildren(FrameLayout.java:383) at android.widget.FrameLayout.onLayout(FrameLayout.java:321) at com.android.internal.policy.DecorView.onLayout(DecorView.java:751) at android.view.View .layout(View.java:17838) 08-16 17:01:40.928 5047-5047/com.example.admin.myappl E/AndroidRuntime: 在 android.view.ViewGroup.layout(ViewGroup.java:5754) 在 android。 view.ViewRootImpl.performLayout(ViewRootImpl.java:2722)
在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2395) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1473) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6976)

【问题讨论】:

标签: java android android-layout retrofit2


【解决方案1】:

更改 adapter = new DataAdapter(data,context); 行改为adapter = new DataAdapter(data,YourActivity.this);

然后,转到 Adapter 类,

并粘贴

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private ArrayList<dashboard.Dashboard_info> android;
    private Activity activity;

    public DataAdapter(ArrayList<dashboard.Dashboard_info> android,Activity activity) {
        this.android = android;
        this.activity = activity;
    }

现在用毕加索和

Picasso.with(activity).load(android.get(i)
                .getWeek_image())
                .resize(250,200) 
                .into(viewHolder.img_android);

【讨论】:

    【解决方案2】:

    也许问题出在此处: Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

    【讨论】:

      【解决方案3】:

      正如错误所说,您将 null 上下文对象传递给 Picasso.with() 方法。

      要解决这个问题,您可以在 onBindViewHolder() 方法中执行类似的操作:

      //inside onBindViewHolder ()
      Picasso.with(holder.itemView.getContext()).load("url here").into(yourImageView);
      

      因此,如您所见,您甚至不需要在构造函数中将上下文传递给适配器。

      【讨论】:

        猜你喜欢
        • 2017-10-30
        • 2018-10-03
        • 2017-06-15
        • 1970-01-01
        • 2016-08-10
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多