毕加索图书馆从 Parse.com 加载图像 使用回收器视图会产生错误"Target must not be null"



我有三个图像存储在Parse.com上的一个名为"events"的表类中,在一个名为"image"的表列中

我还没有找到一种方法来加载所有的图像从Parse.com在一个循环视图没有只有一个图像被显示,所以我诉诸于毕加索图像加载器,看看我是否可以显示所有三个图像内的循环视图一次(没有单一的图像只显示)

但我现在的困境是,我得到这个错误:

 java.lang.IllegalArgumentException: Target must not be null.
        at com.squareup.picasso.RequestCreator.into(RequestCreator.java:618)
        at com.squareup.picasso.RequestCreator.into(RequestCreator.java:601)
        at pi.com.myparserecyclercardview.MainActivity$1.done(MainActivity.java:260)
        at com.parse.FindCallback.internalDone(FindCallback.java:45)
        at com.parse.FindCallback.internalDone(FindCallback.java:1)
        at com.parse.Parse$6$1.run(Parse.java:888)
        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:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

在我的主要活动中显示了第260行,它具有:

  .into(imageViewPicasso);

这是我的主要活动:

public class MainActivity extends Activity {

//Defining Variables
protected Toolbar toolbar;
protected NavigationView navigationView;
private DrawerLayout drawerLayout;
protected Button mButtonHeader;
protected TextView mDayOfTheWeek;
protected TextView mDate;

private RecyclerView mRecyclerView;
//New Variables
private CustomAdapter mAdapter;


final List<Information> data = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //RecyclerView with Parse
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view_layout);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mAdapter = new CustomAdapter(getApplicationContext(), data);

    //Query to load String data into the card view/recycler view
    ParseQuery<ParseObject> query = ParseQuery.getQuery("events");
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            if (e == null) {
                for (int i = 0; i < objects.size(); i++) {
                    Information information = new Information();
                    information.mNewstTitle = objects.get(i).getString("name");
                    information.mNewsStory = objects.get(i).getString("shortinfo");
                    //information.partyCost = parseObject.getString("partyName");

                    String url=objects.get(i).getParseFile("image").getUrl();

                    //information.mEventsPhotoID = objects.getParseFile("partyFlyerImage");
                    //information.mEventsPhotoID = objects.get(i).getParseFile("image");


                    //information.mNewsPhotoIcon = R.drawable.newsitem));
                    //Initialize ImageView
                    ParseImageView imageViewPicasso = (ParseImageView) findViewById(R.id.eventsPhotoID);
                    //Loading image from below url into imageView
                    Picasso.with(MainActivity.this)
                            .load(url)
                            .into(imageViewPicasso);

                    data.add(information);
                }
            } else {
                // something went wrong
            }
            //adapter.notifyItemRangeInserted(startPosition, imageUrls.length);
            mRecyclerView.setAdapter(mAdapter);
        }
    });





}//END onCreate

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}
 }//END MAIN ACTVITY CLASS

是我的适配器类:

 public class CustomAdapter extends     RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
//private List<String> imageUrls = new ArrayList<>();
List<Information> data = Collections.emptyList();
private LayoutInflater inflater;
private Context context;
/*public CustomAdapter (Context context,List<Information>data){
    this.context=context;
    inflater=LayoutInflater.from(context);
    this.data= data;
}*/
public CustomAdapter (Context context,List<Information>data){
    this.context=context;
    inflater=LayoutInflater.from(context);
    this.data= data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View view= inflater.inflate(R.layout.cardview_upcomingshows, parent, false);
    MyViewHolder holder = new MyViewHolder(view);

    return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
    Information current= data.get(position);
    //holder.mEventsPhotoID.setImageResource(current.mEventsPhotoID);
    holder.mNewstTitle.setText(current.mNewstTitle);
    holder.mNewsStory.setText(current.mNewsStory);
    holder.mEventsPhotoID.setParseFile(current.mEventsPhotoID);
    //holder.mEventsPhotoIDTwo.setParseFile(current.mEventsPhotoIDTwo);

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

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    //ImageView mEventsPhotoID;
    TextView mNewstTitle;
    TextView mNewsStory;
    ParseImageView mEventsPhotoID;
    //ParseImageView mEventsPhotoIDTwo;

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

        //promoterImage = (ParseImageView) itemView.findViewById(R.id.promoterPicImage);
        mEventsPhotoID = (ParseImageView) itemView.findViewById(R.id.eventsPhotoID);
        //mEventsPhotoIDTwo = (ParseImageView) itemView.findViewById(R.id.eventsPhotoIDTwo);
        mNewstTitle = (TextView) itemView.findViewById(R.id.newsTitle);
        mNewsStory = (TextView) itemView.findViewById(R.id.newsStory);

        mNewstTitle.setOnClickListener(this);
        mNewsStory.setOnClickListener(this);
        itemView.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Recycle Click" + getLayoutPosition(), Toast.LENGTH_SHORT).show();
        if(getLayoutPosition()==0){
            Intent intentEventsWebView = new Intent(itemView.getContext(), EventsWebViewActivity.class);
            //intentIndependenceDay.putExtra("MyClass", myclass);
            intentEventsWebView.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            itemView.getContext().startActivity(intentEventsWebView);
        }
        if(getLayoutPosition()==1){
            Intent intentIndependenceDay = new Intent(itemView.getContext(), NextActivity.class);
            //intentIndependenceDay.putExtra("MyClass", myclass);
            intentIndependenceDay.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            itemView.getContext().startActivity(intentIndependenceDay);
        }
        if(getLayoutPosition()==2){
            Intent intentShelleyMaxwellDance = new Intent(itemView.getContext(), OtherActivity.class);
            //intentIndependenceDay.putExtra("MyClass", myclass);
                   intentShelleyMaxwellDance.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            itemView.getContext().startActivity(intentShelleyMaxwellDance);
        }

    }
}
 }

我花了一整天的时间来解决这个问题。parseFile.getURL()返回解析服务器的本地URL,我们无法使用picasso访问。相反,它将本地URL替换为解析URL,如下所示

parseFile.getURL()返回如下格式的url,该url是自己的解析服务器本地url。

http://localhost: 1337/解析/文件/ObQCLvddfasAzP7LWcZYPmzMYIDEALOGRPAAHTO f2823c0b613248sdafsa60bdfc941c230ba_profile.png

使用下面的代码使用picasso加载图像

String [] imgArr= parseFile.getUrl().split("parse/");Picasso.with (ImageDemo.this) .load (NetworkConstants.PARSE_URL + imgArr [1]) .into (imageView);

这是100%的工作代码

相关内容

最新更新