这就是我的情况:我想展示一些片段。在我的例子中,我有一个包含一些学生的sqlite数据库,这些字段是:_id,Name,Lastname,sex,photoSize,field1,field2,field3,field4。例如,如果field1 == 1,我必须显示片段1,如果field2 == 2,我必须显示片段2,依此类推。我不知道我做错了什么。下面是代码。
public class SectionsPagerAdapter extends FragmentPagerAdapter {
Bundle b = getIntent().getExtras();
int i = 2;
Cursor c;
Cursor c2;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
String id = b.getString("id");
c2 = dbm.buscarAlumno(id);
if (c.moveToFirst()) {
switch (position) {
case 0:
if (c2.getString(5).equals("1")) {
return PlaceholderFragment.newInstance(position);
} else {
break;
}
case 1:
if (c2.getString(6).equals("1")) {
return PlaceholderFragment.newInstance(position);
} else {
break;
}
case 2:
if (c2.getString(7).equals("1")) {
return PlaceholderFragment.newInstance(position);
} else {
break;
}
case 3:
if (c2.getString(8).equals("1")) {
return PlaceholderFragment.newInstance(position);
} else {
break;
}
case 4:
return PlaceholderFragment.newInstance(position);
}
}
return null;
}
@Override
public int getCount() {
// Show 1 total pages.
return 5;
}
@Override
public CharSequence getPageTitle(int position) {
String id = b.getString("id");
c = dbm.buscarAlumno(id);
if (c.moveToFirst()) {
switch (position) {
case 0:
if (c.getString(5).equals("1")){
return "PISTA";
}
case 1:
if (c.getString(6).equals("1")){
return "ESTABLO";
}else{break;}
case 2:
if (c.getString(7).equals("1")){
return "EMOCIONES";
}else{break;}
case 3:
if (c.getString(8).equals("1")){
return "NECESIDADES";
}else{break;}
case 4:
return b.getString("alumno");
}
}return null;
}
}在容器类中声明了dbm变量,意思是DataBaseManager,buscarAlumno(id)是返回学生的方法,并保证这个方法工作得很好。下面是logcat:
12-30 07:43:14.419 3104-3104/? W/EGL_emulation: eglSurfaceAttrib not implemented
12-30 07:43:14.429 3104-3104/? D/OpenGLRenderer: Enabling debug mode 0
12-30 07:43:17.849 1340-1354/? W/Binder: Caught a RuntimeException from the binder stub implementation.
java.lang.NullPointerException
at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280)
at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)
12-30 07:43:17.849 1253-1353/? W/InputMethodManagerService: Got RemoteException sending setActive(false) notification to pid 3076 uid 10057如果我不使用数据库,它会工作得很好。
请帮帮我!谢谢大家!
发布于 2015-12-30 21:14:43
看起来你从你的getItem()返回了一个null --这就是为什么你会得到NullPointerException。在某些情况下,您的getItem()允许返回空指针。例如,如果item为0,但以下内容不为真:
if (c2.getString(5).equals("1")) {然后返回空指针,和getPageTitle一样,看起来你也可以在这里返回null。
https://stackoverflow.com/questions/34530139
复制相似问题