gringoirejyc 2015-07-01 06:04 采纳率: 0%
浏览 2096

android studiod 从数据库读取数据失败

从数据库读取数据到listview,但是不知为什么,在没添加数据进数据库的时候,能进activity,但是一旦添加进去以后就开始报错了
DBhelper.java
public class DBHelper extends SQLiteOpenHelper{
private final static String DATABASE_NAME = "demo.db";
private final static int DATABASE_VERSION = 1;

private final static String TABLE_NAME = "request_list";
public final static String  REQUEST_ID = "request_id";
public final static String REPORTER_NAME = "reporter_name";
public final static String S_DESCRIPTION = "s_description";
public final static String L_DESCRIPTION = "l_description";
public final static String DEPARTMENT = "department";
public final static String CATEGORY = "category";


public DBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    Log.e("Database operations", "Database created/opened");

}



@Override
public void onCreate(SQLiteDatabase db) {
    String sql = "CREATE TABLE " + TABLE_NAME +
            " (" + REQUEST_ID     + " INTEGER primary key autoincrement, " +
            ""    + REPORTER_NAME + " text, " +
            ""    + S_DESCRIPTION + " text, " +
            ""    + L_DESCRIPTION + " text, " +
            ""    + DEPARTMENT     + " text, " +
            ""    + CATEGORY       + " text);";
    db.execSQL(sql);
    Log.e("Database operations", "Table created/opened");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
    db.execSQL(sql);
    onCreate(db);
}

public Cursor select() {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db
            .query(TABLE_NAME, null, null, null, null, null, null);
    return cursor;
}

public  Cursor getInformation(SQLiteDatabase db)
{
    Cursor cursor;
    String[] projection = {REPORTER_NAME,S_DESCRIPTION,L_DESCRIPTION,DEPARTMENT,CATEGORY};

    cursor=db.query(TABLE_NAME,projection,null,null,null,null,null,null);
    return  cursor;
}
//增加操作
public long insert(String s_description,String name,String department, String category,String l_description)
{
    SQLiteDatabase db = this.getWritableDatabase();

/* ContentValues */
ContentValues cv = new ContentValues();
cv.put(S_DESCRIPTION, s_description);
cv.put(L_DESCRIPTION,l_description);
cv.put(REPORTER_NAME,name);
cv.put(DEPARTMENT,department);
cv.put(CATEGORY,category);

    long row = db.insert(TABLE_NAME, null, cv);
    return row;
}
//删除操作
public void delete(int id)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String where = REQUEST_ID + " = ?";
    String[] whereValue ={ Integer.toString(id) };
    db.delete(TABLE_NAME, where, whereValue);
}
//修改操作
public void update(int id, String s_description,String name,String department, String category,String l_description)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String where = REQUEST_ID + " = ?";
    String[] whereValue = { Integer.toString(id) };

    ContentValues cv = new ContentValues();
    cv.put(S_DESCRIPTION, s_description);
    cv.put(L_DESCRIPTION,l_description);
    cv.put(REPORTER_NAME,name);
    cv.put(DEPARTMENT,department);
    cv.put(CATEGORY,category);
    db.update(TABLE_NAME, cv, where, whereValue);
}

}

DataListActivity.java
public class DataListActivity extends ActionBarActivity {
ListView listView;
SQLiteDatabase sqLiteDatabase;
DBHelper dbHelper;
Cursor cursor;
ListDataAdapter listDataAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data_list_layout);

    listView = (ListView) findViewById(R.id.list_view);

    listDataAdapter = new ListDataAdapter(getApplicationContext(),R.layout.reporter_my_request);
    listView.setAdapter(listDataAdapter);

    dbHelper = new DBHelper(getApplicationContext());
    sqLiteDatabase = dbHelper.getReadableDatabase();
    cursor = dbHelper.getInformation(sqLiteDatabase);
    if(cursor.moveToFirst())
    {
        do {
            String name,title,department,category,description;
            name = cursor.getString(0);
            title= cursor.getString(1);
            department=cursor.getString(2);
            category=cursor.getString(3);
            description=cursor.getString(4);

            DataProvider dataProvider=new DataProvider(name,title,department,category,description);

            listDataAdapter.add(dataProvider);


        }while (cursor.moveToNext());

        }
    dbHelper.close();

    }

}

    DataProvider.java
    public class DataProvider {

private String name;
private String title;
private String department;
private String category;
private String description;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDepartment() {
    return department;
}

public void setDepartment(String department) {
    this.department = department;
}

public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public DataProvider(String name,String title,String department,String category,String description){
    this.name= name;
    this.title = title;
    this.department= department;
    this.category= category;
    this.description = description;


}

}

ListDataAdapter.java
public class ListDataAdapter extends ArrayAdapter {
List list = new ArrayList();
public ListDataAdapter(Context context, int resource) {
super(context, resource);

}


static class LayoutHandler{

    TextView NAME,TITLE,DEPARTMENT,CATEGORY,DESCRIPTION;
}
@Override
public void add(Object object) {
    super.add(object);
    list.add(object);
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;
    LayoutHandler layoutHandler;
    if(row == null){
        LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.reporter_my_request,parent,false);
        layoutHandler = new LayoutHandler();
        layoutHandler.NAME = (TextView)row.findViewById(R.id.text_name);
        layoutHandler.TITLE = (TextView)row.findViewById(R.id.text_title);
        layoutHandler.DEPARTMENT = (TextView)row.findViewById(R.id.text_department);
        layoutHandler.CATEGORY = (TextView)row.findViewById(R.id.text_category);

        row.setTag(layoutHandler);

    }
    else
    {
        layoutHandler = (LayoutHandler)row.getTag();


    }
    DataProvider dataProvider = (DataProvider)this.getItem(position);
    layoutHandler.NAME.setText(dataProvider.getName());
    layoutHandler.TITLE.setText(dataProvider.getTitle());
    layoutHandler.DEPARTMENT.setText(dataProvider.getDepartment());
    layoutHandler.CATEGORY.setText(dataProvider.getCategory());
    layoutHandler.DESCRIPTION.setText(dataProvider.getDescription());

    return row;
}

}

  • 写回答

1条回答

  • ljcmeng 2015-07-01 10:08
    关注

    至少把报错的信息贴出来啊,你这么一大段代码贴上来怎么帮你看

    评论

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题