java.lang.ClassCastException:android.app.Application无法转换为

时间:2018-09-21 06:20:52

标签: android android-activity android-recyclerview objectbox

创建的Objectbox类扩展了ApplicationRecyclerview AdapterActivity中使用的此类。如何在RecyclerView中声明?使用对象类,我已将数据存储在ObjectBox数据库中,并给出以下错误:

  

java.lang.ClassCastException:android.app.Application无法转换为

使用ObjectBoxImageViewImageButton OnClickListener数据库中存储的数据可以存储在对象箱数据库中吗?请引导我。

public class ObjectBox extends Application{

    private static ObjectBox box;
    private BoxStore boxStore;

    @Override
    public void onCreate() {
        super.onCreate();

        boxStore = MyObjectBox.builder().androidContext(ObjectBox.this).build();
    }

    public static ObjectBox getBox(){
        return box;
    }

    public BoxStore getBoxStore(){
        return boxStore;
    }
}



public class ThumbnailAdapter extends RecyclerView.Adapter<ThumbnailAdapter.MyViewHolder>{


    private Context mContext;
    private List<Thumbnail> albumList;
    private List<Giphy> giphyList;

    private BoxStore boxStore;
    private Box<Giphy> box;



    public class MyViewHolder extends RecyclerView.ViewHolder {
       // public TextView title, count;

        @BindView(R.id.imgThumbnail)
        public ImageView imageView;

        @BindView(R.id.imgButtonThumbUp)
        public ImageButton imageButtonUP;

        @BindView(R.id.imgButtonThumbDown)
        public ImageButton imageButtonDown;

        @BindView(R.id.tvThumbUpCount)
        public TextView tvUpCount;

        @BindView(R.id.tvThumbDownCount)
        public TextView tvCountDown;

        int countUP = 0;
        int countDown = 0;

        String url;
        int id = 0;
        int thumbUp,thumbDown;

        public MyViewHolder(View view) {
            super(view);
            mContext = view.getContext();
            //imageView = (ImageView) view.findViewById(R.id.imgThumbnail);

            ButterKnife.bind(this,view);




            int idCount = id++;

            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   // String Title = title.getText().toString();

                    Thumbnail list = albumList.get(getAdapterPosition());

                    url = list.getVideoUrl();

                    Intent intent = new Intent(mContext,ExoPlayer.class);
                    intent.putExtra("url",list.getVideoUrl());


                    mContext.startActivity(intent);


                }
            });

            imageButtonUP.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                   thumbUp = countUP++;

                    //box.put(countUP);

                    tvUpCount.setText(""+countUP);
                }
            });

            imageButtonDown.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    thumbDown = countDown++;

                   // box.put(countDown);

                    tvCountDown.setText(""+countDown);
                }
            });

            addData(new Giphy(idCount,url,thumbUp,thumbDown));

        }



    }

    public ThumbnailAdapter(Context mContext, List<Thumbnail> albumList,List<Giphy> giphyList) {
        this.mContext = mContext;
        this.albumList = albumList;
        this.giphyList = giphyList;


        boxStore = ((ObjectBox)mContext.getApplicationContext()).getBoxStore();

        box = boxStore.boxFor(Giphy.class);

    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_list_item_album, parent, false);

        return new MyViewHolder(itemView);
    }

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


        Thumbnail album = albumList.get(position);



        Glide.with(mContext)
                .asGif()
                .load(album.getGif())
                .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))


                .into(holder.imageView);


    }

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

    public void addData(Giphy giphy){
        box.put(giphy);
    }
}

1 个答案:

答案 0 :(得分:0)

在清单文件(AndroidManifest.xml)中,应像应用程序名称一样添加ObjectBox类,在我的情况下,ObjectBox类称为App,在清单中,只需在标签应用程序中添加属性名称:< / p>

示例

 <application
        android:name=".**YourObjectBoxClass**">
...
</aplication>

Screenshot Manifest