2014-03-03 6 views
0

데이터베이스에서 데이터를 가져 오는 동안 listview.i에 내 dbhelper 클래스의 테이블을 가져와야합니다. 하나는 로그인 데이터 테이블이고 다른 하나는 데이터 저장 테이블입니다. 이 테이블에서 데이터를리스트 뷰로 가져옵니다. 여기에 내 코드를 찾아 문제가 무엇인지 말해주십시오. 내 로그 고양이는 getAllValues ​​() 메소드에서 널 포인트 예외를 보여줍니다. 도와주세요. 여기 데이터베이스에서 목록보기로 데이터를 가져 오는 방법

public class DbHelper extends SQLiteOpenHelper { 
private static final String DATABASE_NAME = "sri.db"; 
private static final int DATABASE_VERSION = 1; 
public static final String TABLE_NAME = "login"; 
private static final String TABLE_CREATE ="CREATE TABLE " + TABLE_NAME + "(" + 
    "_id INTEGER PRIMARY KEY AUTOINCREMENT,"+ 
    "username TEXT NOT NULL, password TEXT NOT NULL);"; 

private static final String DB_ADMIN = "INSERT INTO "+TABLE_NAME+"values(1, admin,     password);"; 

public static final String TABLE_NAME_SAVE="saveinfo"; 
public static final String KEY_ID="_id"; 
public static final String KEY_URL="surl"; 
public static final String KEY_UID="suid"; 
public static final String KEY_PASS="spassword"; 

public static final String SCRIPT="CREATE TABLE" + TABLE_NAME_SAVE + "(" + "_id INTEGER PRIMARY KEY AUTOINCREMENT,"+ 
"surl TEXT NOT NULL, suid TEXT NOT NULL, spassword TEXT NOT NULL);"; 



public DbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    System.out.println("In constructor"); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    try{ 
     //Create Database 
     db.execSQL(TABLE_CREATE); 
     //create admin account 
     db.execSQL(DB_ADMIN); 
     //System.out.println("In onCreate"); 
     db.execSQL(SCRIPT); 
    }catch(Exception e){ 
    e.printStackTrace(); 
    } 



} 


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

    onCreate(db); 

} 
     SQLiteDatabase db; 

    public Cursor getAllValues() { 
// TODO Auto-generated method stub 
String[] clumns={KEY_ID,KEY_URL,KEY_UID,KEY_PASS}; 
return db.query(TABLE_NAME_SAVE, clumns, null, null, null, null, null); 
    } 

    void deleteAllRecords(){ 
    db.delete(TABLE_NAME_SAVE, null, null); 
} 




void deleteOneRecord(String rowid){ 
    db.delete(TABLE_NAME_SAVE, rowid +"="+KEY_ID, null); 
} 

public void openDatabase() { 
    // TODO Auto-generated method stub 

} 



} 

는 CALSS

여기

DbHelper입니다

public class DisplayActivity extends Activity implements OnItemLongClickListener { 

DbHelper db=new DbHelper(this); 
Cursor cursor; 
ListView list; 
private int position; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display); 
    db.openDatabase(); 
    list = (ListView) findViewById(R.id.lvf); 

    //updateListView(); 
     list.setOnItemLongClickListener(this); 
} 



class CustomAdapter extends BaseAdapter { 

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

     @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 arg2) { 
     // TODO Auto-generated method stub 
     view = getLayoutInflater().inflate(R.layout.details, null); 

     TextView t0 = (TextView) view.findViewById(R.id.did); 
     TextView t1 = (TextView) view.findViewById(R.id.durl); 
     TextView t2 = (TextView) view.findViewById(R.id.duid); 
     TextView t3 = (TextView) view.findViewById(R.id.dpass); 

     cursor.moveToPosition(position); 

     String rowid = cursor.getString(0); 
     String url = cursor.getString(1); 
     String uid = cursor.getString(2); 
     String pass=cursor.getString(3); 

     t0.setText(rowid); 
     t1.setText(url); 
     t2.setText(uid); 
     t3.setText(pass); 
     return view; 
     } 

    } 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.display, menu); 
    return true; 
} 
void updateListView() { 
    // TODO Auto-generated method stub 
    cursor = db.getAllValues(); 
     CustomAdapter cs = new CustomAdapter(); 
     list.setAdapter(cs); 


} 

@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, 
     long arg3) { 
    // TODO Auto-generated method stub 
    this.position=pos; 
    return false; 
} 

} 

답변

0

사용 커서 어댑터가 아래의 예를 참조 내 DisplayActivity있는 .java CALSS입니다 :

public class ContactCursorAdapterCT extends CursorAdapter { 
     public ContactCursorAdapterCT(Context context, Cursor c) { 
    super(context, c); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 

    while (cursor.moveToNext()) { 

    TextView name = (TextView)view.findViewById(R.id.blacklistDB1);    
      name.setText(cursor.getString(cursor.getColumnIndex 
      (ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))); 

      TextView phone = (TextView)view.findViewById(R.id.blacklistDB2); 
      phone.setText(cursor.getString(cursor.getColumnIndex 
      (ContactsContract.CommonDataKinds.Phone.NUMBER))); 

} 
} 

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

    LayoutInflater inflater = LayoutInflater.from(context); 

    View v = inflater.inflate(R.layout.lv, parent, false); 
      bindView(v, context, cursor); 
      return v; 
     } 
0

당신 하지 않았다 DbHelper 방법으로 db을 초기화했습니다. 클래스 필드에서 삭제하십시오. 필요하지 않습니다. 당신은 당신의 getAllValues() 방법에 다음처럼 init을한다 :

public Cursor getAllValues() { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db = this.getWritableDatabase(); 
    String[] clumns={KEY_ID,KEY_URL,KEY_UID,KEY_PASS}; 
    return db.query(TABLE_NAME_SAVE, clumns, null, null, null, null, null); 

}

BTW, 그것은 SQLiteOpenHelper에 대한 싱글을 사용하는 것이 좋습니다. 그런 경우에는 모든 메소드에서 데이터베이스를 얻을 수있다. 단지`SQLiteDatabase db = getWritableDatabase();

관련 문제