2017-08-16 37 views
-5

主類:畢加索再循環視圖改型2在網格視圖

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:上下文不能爲null。在com.squareup.picasso.Picasso $ Builder。(Picasso.java:701)at com.squareup.picasso.Picasso.with(Picasso.java:662)at com.example.admin.myappl.Adapter.DataAdapter.onBindViewHolder( DataAdapter.java:37)at com.example.admin.myappl.Adapter.DataAdapter.onBindViewHolder(DataAdapter.java:18)at android.support.v7.widget.RecyclerView $ Adapter.onBindViewHolder(RecyclerView.java:6400)at android .support.v7.widget.RecyclerView $ Adapter.bindViewHolder(RecyclerView.java:6433)at android.support.v7.widget.RecyclerView $ Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5377)at 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)at android.support.v7.widget.LinearLayoutManager $ LayoutState.next(LinearLayoutManager.java:2215)at android.support.v7.widget.Grid LayoutManager.layoutChunk(GridLayoutManager.java:556)at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1502)at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)at android .support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3625)at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView的.java:3354)在android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3886)在android.view.View.layout(View.java:17838)在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.ViewOffsetBehavior.on上的android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) LayoutCild(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.widget.FrameLayout.layoutChildren(FrameLayout.java:383)android.widget.FrameLayout.onLayout上android.view.ViewGroup.layout(ViewGroup.java:5754)處的view.View.layout(View.java:17838) (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.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)在android.widget.LinearLayout.onLayout(LinearLayout.java:1735)在android.view.View.layout(View.java:17838)在android。 view.Vi在android.widget.FrameLayout.onLayout(FrameLayout.java:321)在android.view.View.layout(視圖)android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)ewGroup.layout(ViewGroup.java:5754) .java:17838)在android.widget.Lineout.layoutVertical(LinearLayout.java:1826)android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)android.view.ViewGroup.layout(ViewGroup.java:5754)在android.widget.LinearLayout.onLayout(LinearLayout.java:1735)在android.view.View.layout(View.java:17838)在android.view.ViewGroup.layout(ViewGroup.java:5754)在android.widget。在android.view.View的com.android.internal.policy.DecorView.onLayout(DecorView.java:751)android.widget.FrameLayout.onLayout(FrameLayout.java:321)FrameLayout.layoutChildren(FrameLayout.java:383) .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)在機器人。 view.ViewRootImpl.performLayout(ViewRootImpl.java:2722)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl。Java的:2395)在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1473)在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6976)

+0

[什麼是NullPointerException,以及如何解決它?]的可能重複(https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it ) –

回答

0

變化adapter = new DataAdapter(data,context);adapter = new DataAdapter(data,YourActivity.this);

然後,轉到適配器類,

並粘貼

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); 
0

如錯誤所述,您將null上下文對象傳遞給Picasso.with()方法。

爲了解決這個問題,你可以做這樣的事情在你的onBindViewHolder()方法:

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

所以,你可以看到,你甚至都不需要通過上下文來在構造適配器。