在片段中使用RecyclerView和Parse数据库时遇到问题

时间:2015-09-10 06:09:48

标签: android android-fragments parse-platform android-recyclerview

我对Android编程非常陌生,我试图将Parse数据库连接到我的RecyclerView。当我打开这个片段时,它会关闭整个应用程序。它之前工作时我的事件对象只有一个参数,我查询了数据库的一个部分,但我不得不将其更改为一个单独的对象,因为我需要更多的数据库部分。我还尝试在查询方法的不同部分中移动RecyclerView但它仍然没有打开,因为它确实在我确定我的问题出在EventFragment类之前。

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;

import java.util.Collections;
import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 *
 */

public class EventFragment extends android.support.v4.app.Fragment {

    TextView text;

    private RecyclerView recyclerView;
    public static adapter adapt;

    public static List<Event> dbObjects = Collections.emptyList();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //Log.d("IN EVENT FRAGMENT", "WE ARE IN!!!!");

        // Inflate the layout for this fragment
        final View v = inflater.inflate(R.layout.fragment_event, container, false);

        ParseQuery<ParseObject> query = ParseQuery.getQuery("Posts");
        query.whereExists("title");
        query.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> objList, ParseException e) {
                //dbObjects = scoreList;
                //adapt = new adapter(getActivity(), dbObjects);
                if (e == null) {

                    for (ParseObject obj : objList) {
                        //Log.d("DEBUG", "The username is:" + dbObjects.size());

                        Event event = new Event(obj.getString("title"), obj.getString("eventDate"));


                        dbObjects.add(event);
                    }



                } else {
                    Log.d("HELLO", "Something went wrong!");
                }


            }
        });

        //RecyclerView
        adapt = new adapter(getActivity(), dbObjects);
        recyclerView = (RecyclerView) v.findViewById(R.id.recycle);
        recyclerView.setAdapter(adapt);
        recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
        final LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(llm);


        return v;
    }
}

这是我的适配器类

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;


public class adapter extends RecyclerView.Adapter<adapter.MyViewHolder>  {
    private LayoutInflater inflater;
    private Context context;
    public static List<Event> data;

    public adapter(Context context, List<Event> objects) {
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.data = objects;
    }

    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.custom, parent, false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;

    }

    public void onBindViewHolder(MyViewHolder holder, int position) {
        Event current = data.get(position);
        holder.title.setText(current.getTitle());
        holder.date.setText(current.getDate());
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        TextView date;

        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.title);
            date = (TextView) itemView.findViewById(R.id.date);
        }
    }

}

我的事件对象

public class Event {
    public String title;
    public String date;

    public Event(String tit, String dat) {
        title = tit;
        date = dat;
    }

    public String getTitle() {
        return title;
    }

    public String getDate() {
        return date;
    }

}

logcat的

09-10 09:10:02.116    6767-6767/? I/art﹕ Not late-enabling -Xcheck:jni (already on)
09-10 09:10:03.231    6767-6779/suyash.sjsu_cs_club I/art﹕ Background sticky concurrent mark sweep GC freed 1793(132KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 35MB/35MB, paused 3.498ms total 116.782ms
09-10 09:10:03.241    6767-6779/suyash.sjsu_cs_club W/art﹕ Suspending all threads took: 9.643ms
09-10 09:10:03.452    6767-6779/suyash.sjsu_cs_club W/art﹕ Suspending all threads took: 10.751ms
09-10 09:10:03.922    6767-6790/suyash.sjsu_cs_club D/OpenGLRenderer﹕ Render dirty regions requested: true
09-10 09:10:03.928    6767-6767/suyash.sjsu_cs_club D/﹕ HostConnection::get() New Host Connection established 0xae0b8e70, tid 6767
09-10 09:10:03.953    6767-6767/suyash.sjsu_cs_club D/Atlas﹕ Validating map...
09-10 09:10:04.041    6767-6790/suyash.sjsu_cs_club D/﹕ HostConnection::get() New Host Connection established 0xa6c91360, tid 6790
09-10 09:10:04.069    6767-6790/suyash.sjsu_cs_club I/OpenGLRenderer﹕ Initialized EGL, version 1.4
09-10 09:10:04.188    6767-6790/suyash.sjsu_cs_club D/OpenGLRenderer﹕ Enabling debug mode 0
09-10 09:10:04.205    6767-6790/suyash.sjsu_cs_club W/EGL_emulation﹕ eglSurfaceAttrib not implemented
09-10 09:10:04.205    6767-6790/suyash.sjsu_cs_club W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6cab0c0, error=EGL_SUCCESS
09-10 09:10:21.407    6767-6767/suyash.sjsu_cs_club D/AndroidRuntime﹕ Shutting down VM
09-10 09:10:21.408    6767-6767/suyash.sjsu_cs_club E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: suyash.sjsu_cs_club, PID: 6767
    java.lang.UnsupportedOperationException
            at java.util.AbstractList.add(AbstractList.java:404)
            at java.util.AbstractList.add(AbstractList.java:425)
            at suyash.sjsu_cs_club.EventFragment$1.done(EventFragment.java:66)
            at suyash.sjsu_cs_club.EventFragment$1.done(EventFragment.java:54)
            at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
            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:5221)
            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:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
09-10 09:11:52.915    6767-6774/suyash.sjsu_cs_club W/art﹕ Suspending all threads took: 5.668ms

这也是一个单独的问题,可能需要第二篇文章,但我如何为RecyclerView创建一个onItemClickListener,其内容会在数据库中定期更改?

0 个答案:

没有答案