Android 在片段内使用RecyclerView解析数据库时遇到问题
我对Android编程非常陌生,我正在尝试将解析数据库连接到我的RecyclerView。当我打开这个片段时,它会在失败时关闭整个应用程序。以前,我的事件对象只有一个参数,我查询了数据库的一个部分,但我不得不将其更改为单独的对象,因为我需要数据库的更多部分。我还尝试将不同部分中的RecyclerView移入和移出查询方法,但它仍然没有打开,因为它在我确定我的问题在于EventFragment类之前工作正常Android 在片段内使用RecyclerView解析数据库时遇到问题,android,android-fragments,parse-platform,android-recyclerview,Android,Android Fragments,Parse Platform,Android Recyclerview,我对Android编程非常陌生,我正在尝试将解析数据库连接到我的RecyclerView。当我打开这个片段时,它会在失败时关闭整个应用程序。以前,我的事件对象只有一个参数,我查询了数据库的一个部分,但我不得不将其更改为单独的对象,因为我需要数据库的更多部分。我还尝试将不同部分中的RecyclerView移入和移出查询方法,但它仍然没有打开,因为它在我确定我的问题在于EventFragment类之前工作正常 import android.os.Bundle; import android.supp
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;
}
}
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?问题在于这行代码:
public static List<Event> dbObjects = Collections.emptyList();
下面是AbstractList
中的add()
方法的片段
@Override
public boolean add(E object) {
add(size(), object);
return true;
}
public void add(int location, E object) {
throw new UnsupportedOperationException();
}
请添加错误的堆栈跟踪。
public static List<Event> dbObjects = Collections.emptyList();
public static List<Event> dbObjects = new LinkedList<Event>();
private static final class EmptyList extends AbstractList
implements RandomAccess, Serializable {
private static final long serialVersionUID = 8842843931221139166L;
@Override public boolean contains(Object object) {
return false;
}
@Override public int size() {
return 0;
}
@Override public Object get(int location) {
throw new IndexOutOfBoundsException();
}
@Override public Iterator iterator() {
return EMPTY_ITERATOR;
}
private Object readResolve() {
return Collections.EMPTY_LIST;
}
}
@Override
public boolean add(E object) {
add(size(), object);
return true;
}
public void add(int location, E object) {
throw new UnsupportedOperationException();
}