2012-04-02 39 views
0

我想从数据库中检索数据。我没有收到任何错误,但数据未显示。 这里是我的代码:为什么我的数据没有显示?

DbHelper

public class DbHelper extends SQLiteOpenHelper{ 

static final String tag="dbHelper"; 

static final String DB_NAME="dianaaaa.db"; 
static final int DB_VERSION=1; 
static final String TABLE_JOBS="jobs"; 
static final String C_START="start"; 
static final String C_STOP="stop"; 
static final String C_ID_J=BaseColumns._ID; 
Context context; 
SQLiteDatabase db; 



public DbHelper(Context context) { 
    super(context, DB_NAME, null, DB_VERSION); 
    // TODO Auto-generated constructor stub 
    this.context=context; 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

String sql2="create table "+TABLE_JOBS+"("+C_ID_J+" INTEGER PRIMARY KEY, "+C_START+" text, "+C_STOP+" text)"; 

    try{ 
     db.execSQL(sql2); 
    } 
    catch(SQLException e){ 
     Log.d(tag, "no"); 
    }finally{ 

    } 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("drop table if exists "+TABLE_JOBS); 
    Log.d(tag, "onUpdated"); 
    onCreate(db); 

} 


public void insertJStart(String s1){ 
    SQLiteDatabase db = (SQLiteDatabase) getWritableDatabase(); 


    ContentValues values=new ContentValues(); 
    values.clear(); 
    values.put(DbHelper.C_START, s1); 
    try{ 


    db.insertOrThrow(TABLE_JOBS, C_START, values); 

    }catch(SQLException e){ 
     Log.d(tag, "nu vreau...."); 

    }finally{ 

    db.close(); 
    } 
} 

public void insertJStop(String s2){ 
    SQLiteDatabase db=(SQLiteDatabase) getWritableDatabase(); 

    ContentValues values=new ContentValues(); 

    values.clear(); 
    values.put(DbHelper.C_STOP, s2); 
    db.insertOrThrow(TABLE_JOBS, C_STOP, values); 

    db.close(); 
} 


public Cursor getCursor(){ 
    SQLiteQueryBuilder queryBuilder=new SQLiteQueryBuilder(); 
    queryBuilder.setTables(TABLE_JOBS); 

    String[] asColumToRetrun=new String[] { C_ID, C_START, C_STOP}; 


    Cursor mCursor=db.query(TABLE_JOBS, asColumToRetrun, null, null, null, null, "time ASC"); 

    return mCursor; 
} 

public String getDate(Cursor c, int i){ 

    return (c.getString(i)); 
} 




public Cursor getAll(){ 

    db=this.getReadableDatabase(); 
    Cursor c=db.rawQuery("SELECT * FROM jobs ", new String[]{}); 
    return c; 
} 
} 

活动:

public class TimerDB extends Activity{ 

static final String tag="TimerDB"; 

private ListView list; 
MyAdapter aa=null; 
private Cursor cursor=null; 
private DbHelper helper=null; 

final ArrayList<String> aList=new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.times); 

    list=(ListView)findViewById(R.id.timeList); 

    helper=new DbHelper(this); 
    cursor=helper.getAll(); 
    cursor.moveToNext(); 
    startManagingCursor(cursor); 
    aa=new MyAdapter(cursor); 
    list.setAdapter(aa); 

} 

class MyAdapter extends CursorAdapter{ 
    MyAdapter(Cursor c){ 
     super(TimerDB.this, c); 
    } 

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

     View row=convertView; 

     if(row==null){ 
      LayoutInflater inflater=getLayoutInflater(); 
      row=inflater.inflate(R.layout.row, null); 
     } 
     return (row); 

    } 

    @Override 
    public void bindView(View row, Context context, Cursor c) { 
     // TODO Auto-generated method stub 
     Holder holder=(Holder) row.getTag(); 
     holder.populateFrom(c, helper); 

     c.moveToNext(); 

    } 

    @Override 
    public View newView(Context context, Cursor c, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     LayoutInflater inflater=getLayoutInflater(); 
     View row=inflater.inflate(R.layout.row, parent, false); 
     Holder holder=new Holder(row); 
     row.setTag(holder); 
     return row; 
    } 
} 

static class Holder { 
    private TextView id, start, stop; 

    Holder(View row){ 
     id=(TextView) row.findViewById(R.id.rowViewStart); 
     start=(TextView) row.findViewById(R.id.rowViewStart); 
     stop=(TextView) row.findViewById(R.id.rowViewStop); 
    } 
    void populateFrom(Cursor c, DbHelper db){ 
     id.setText(db.getDate(c, 0)); 
     start.setText(db.getDate(c, 1)); 
     stop.setText(db.getDate(c, 2)); 
    } 
} 

} 
+0

你有没有数据库中的数据?我无法找到将数据插入到数据库中的代码(在TimerDB活动中)。 – 2012-04-02 08:20:05

+0

是的,我有另外一个活动,我插入数据 是这样的: bStart.setOnClickListener(新OnClickListener(){ \t \t \t \t \t \t公共无效的onClick(视图v){ \t \t \t \t \t \t \t dbhelp.insertJStart(clock.getText()的toString()); \t \t \t \t \t \t \t \t Log.d(tag,“StartButton”); \t \t \t \t \t \t \t} \t \t}); – 2012-04-02 08:39:32

+0

@DianaC你的列表是否显示空行? – Luksprog 2012-04-02 08:53:13

回答

0

在您的自定义适配器你要么实现getView()方法或您实现newView()bindView()方法(但不是一起getView())。现在你执行这两种方法,但也可以使用overridegetView(),并用这些方法“覆盖”你的适配器实现。只需保留newView()bindView()并删除getView()方法。

如果看一下机器人的源代码,在光标的情况下,适配器getView()方法委托行创建到那些方法(它在调用newView()用于View对象,然后bindView()将数据从光标结合)。

编辑:

- 也不要叫c.moveToNext();,该Cursor总是在正确的位置。

+0

我评论所有getView()函数是一样的...还是空行 – 2012-04-02 09:08:32

+0

@DianaC难道您还添加了布局列表行'R.layout.row'? – Luksprog 2012-04-02 09:23:13

+0

,如果我可以编辑原始帖子.. 。我试图做的是,在最后的15分钟... – 2012-04-02 09:44:38

相关问题