【问题标题】:NullPointerException error on spinner base adapter inside fragment片段内微调器基本适配器上的 NullPointerException 错误
【发布时间】:2016-02-17 15:04:54
【问题描述】:

请帮助我得到 NullPointerException 错误。我是fragment的新手,我试过没有fragment并且它正在工作,我不明白为什么我在fragment上实现它时它不起作用,我检查了数据库,数据库没有问题,谢谢

E/AndroidRuntime: FATAL EXCEPTION: main
Process: id.co.bumisentosa.yantek, PID: 26979
java.lang.NullPointerException
at id.co.bumisentosa.yantek.fragment_JTM.Inspection_JTM_Fragment_Awal_Tab.onCreateView(Inspection_JTM_Fragment_Awal_Tab.java:95)

这是Inspection_JTM_Fragment_Awal_Tab 类代码

public class Inspection_JTM_Fragment_Awal_Tab extends Fragment implements
    OnItemSelectedListener, View.OnClickListener {


// Spinner element
Spinner spinner_unit;

private Context context;
private DatabaseHandler databaseHandler;

static int categoryID;
private List<ItemsDetails> categoryList;
private CategorySpinnerAdapter adapter;



public Inspection_JTM_Fragment_Awal_Tab() {
    // Required empty public constructor
}

public static int getCategory() {
    return categoryID;
}

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.inspection_jtm_fragment_tab_awal, container, false);

    // Spinner element
    spinner_unit = (Spinner) view.findViewById(R.id.spinner_unit_inspeksi_jtm);



    categoryList = databaseHandler.getCategories();

    adapter = new CategorySpinnerAdapter(getActivity(), categoryList);
    spinner_unit.setAdapter(adapter);
    spinner_unit.setOnItemSelectedListener(this);



    return view;
}

我的适配器

public class CategorySpinnerAdapter extends BaseAdapter {

private List<ItemsDetails> list;
private LayoutInflater inflater;
public CategorySpinnerAdapter(Activity activity, List<ItemsDetails> list) {
    this.list = list;
    this.inflater = LayoutInflater.from(activity);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View view, ViewGroup root) {
    if(view == null){
        view = inflater.inflate(R.layout.spinner_item, root, false);
    }
    TextView categoryName = (TextView) view.findViewById(R.id.text_category_name);
    categoryName.setText(list.get(position).getName());
    return view;
}

}

我的数据库处理程序

公共类 DatabaseHandler 扩展 SQLiteOpenHelper {

// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "test";

// Contacts table name

private static final String TABLE_CATEGORY = "category";




// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";




//
public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {


    String CREATE_CATEGORY_TABLES = " CREATE TABLE " + TABLE_CATEGORY
            + "(" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT " + ")";








    db.execSQL(CREATE_CATEGORY_TABLES);

}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CATEGORY);

    // Create tables again
    onCreate(db);
}


public List<ItemsDetails> getCategories() {
    List<ItemsDetails> detailsList = new ArrayList<ItemsDetails>();
    String selectQuery = "SELECT  * FROM " + TABLE_CATEGORY;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            try {
                ItemsDetails details = new ItemsDetails();
                details.setId(cursor.getInt(0));
                details.setName(cursor.getString(1));

                detailsList.add(details);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return detailsList;
}

}

【问题讨论】:

  • 嗨 psyco,对不起,我是这个论坛的新手,我已经编辑了我的问题,你能帮我吗,谢谢
  • 由于你使用的是 List 对象,扩展 ArrayAdapter 更有意义

标签: java android android-fragments


【解决方案1】:

您在 getItem 方法中返回 null。

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

直接返回

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arrayList.get(arg0);
}

【讨论】:

  • 您好,谢谢您的帮助,但我还是不明白,我的问题在这一行 categoryList = databaseHandler.getCategories();
【解决方案2】:

用这个改变你的 CategorySpinnerAdapter

   public class CategorySpinnerAdapter extends BaseAdapter {
private List<ItemsDetails> list;
private LayoutInflater inflater;
private Context context;

public CategorySpinnerAdapter(Context context, List<ItemsDetails> list) {
    this.context=context;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.list = list;
}
@Override
public int getCount() {
    return list.size();
}
@Override
public Object getItem(int position) {
    return list.get(position);
}
@Override
public long getItemId(int position) {
    return position;
}
class MyHolder {
    TextView categoryName;
}


@Override
public View getView(int position, View view, ViewGroup root) {
    if(view == null){
        view = inflater.inflate(R.layout.spinner_item, root, false);
    }
    TextView categoryName = (TextView) view.findViewById(R.id.text_category_name);
    categoryName.setText(list.get(position).getName());
    return view;
}

}

【讨论】:

  • 您好,我试过了,但在同一行 categoryList = databaseHandler.getCategories();
  • 什么是convertView?是视图吗?像这个持有者 = (MyHolder) view.getTag();
  • 在 onCreateView 中创建数据库句柄的对象,像这样 databaseHandler=new DatabaseHandler ();
  • 如果不创建对象,则无法访问应创建对象或制作静态方法的任何方法。
  • 嗨谢谢你我做了databaseHandler=new DatabaseHandler();现在它可以工作了,持有人似乎给出了问题,但是在我输入最后一个代码后它就可以工作了,但是你的代码就像魅力一样,谢谢! :) 我会编辑你的 ocde 和我的,所以每个人都可以使用它,谢谢 PräTîk Tank
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多