Comment obtenir les données des colonnes de base de données sqlite sous ANDROID?

je suis en train de travailler avec la base de données sqlite sous Android pour la première fois. j'ai créer ma base de données Sqlite et le copier à des androïdes "data/data/App package/databases". je suis en mesure de copier et ouvrir la base de données. j'ai quatre tables dans la base de données je veux "State_Name(Column)" from "State_Master(Table)".

mais je ne suis pas en mesure d'obtenir toutes les données(nom de l'État) à partir de la table.

Ici, je poste mon code:

//DataBase Helper
public class DatabaseHelper extends SQLiteOpenHelper {
private String[] stateArray;
private Context context;
private String DB_PATH;
private static String DB_NAME = "myDatabase.sqlite";
public static SQLiteDatabase myDatabase;
public static final String STATE_NAME = "State_Name";
public LoveGodDB(Context context) throws Exception {
super(context, DB_NAME, null, 1);
this.context = context;
DB_PATH = "/data/data/" + context.getApplicationContext().getPackageName() + "/databases/";
boolean dbexist = checkdatabase();
if (dbexist) {
opendatabase();
} else {
createdatabase();
}
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(STATE_NAME);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void createdatabase() throws Exception {
boolean dbexist = checkdatabase();
if (dbexist) {
} else {
this.getReadableDatabase();
try {
copydatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkdatabase() throws Exception {
boolean checkdb = false;
try {
String myPath = DB_PATH + DB_NAME;
File dbfile = new File(myPath);
checkdb = dbfile.exists();
} catch (SQLiteException sle) {
throw sle;
}
return checkdb;
}
private void copydatabase() throws IOException {
InputStream myinput = context.getApplicationContext().getAssets().open(DB_NAME);
OutputStream myoutput = new FileOutputStream("/data/data/"+ context.getApplicationContext().getPackageName() +"/databases/myDataBase.sqlite");
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer)) > 0) {
myoutput.write(buffer, 0, length);
}
myoutput.flush();
myoutput.close();
myinput.close();
}
public void opendatabase() throws SQLException {
String mypath = DB_PATH + DB_NAME;
LGDataBase = SQLiteDatabase.openDatabase(mypath, null,
SQLiteDatabase.OPEN_READWRITE);
}
public synchronized void close() {
if (LGDataBase != null) {
LGDataBase.close();
}
super.close();
}
public Cursor fetchAllTopics() {
return LGDataBase.query("State_Master", new String[] {STATE_NAME}, 
null, 
null, 
null, 
null, 
null);
};
}

}

et mon Activité là où je veux stocker des données en Tableau de chaînes:

public class MyStateGrid extends Activity{
private Button back;
private String[] stateNameArray ;
private GridView gridview = null;
private DatabaseHelper lgDB;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.errandboy_state);
back = (Button) findViewById(R.id.back);
gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
//stateNameArray = getResources().getStringArray(R.array.stateName);
try {
lgDB = new LoveGodDB(this);
lgDB.opendatabase();
Cursor c = lgDB.fetchAllTopics();
startManagingCursor(c); 
stateNameArray = new String[]LoveGodDB.STATE_NAME};
} catch (IOException e) {
} catch (Exception e) {
}finally{
if(lgDB != null){
lgDB.close();
}
}
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent stamp = new Intent(getParent(), xxxx.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("Stamp", stamp);
}
});
OnTouchListener backListener = new OnTouchListener() {
public boolean  onTouch  (View  v, MotionEvent  event) {
if (event.getAction()==MotionEvent.ACTION_UP){
finish();
}
return false;
}
};
back.setOnTouchListener(backListener);
}
public class ImageAdapter extends BaseAdapter {
@SuppressWarnings("unused")
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return stateImageArray.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.galchild, null);
ImageView stampImage;
TextView stampName;
stampImage = (ImageView) v.findViewById(R.id.ImageView01);
stampName = (TextView) v.findViewById(R.id.stampName);
stampImage.setScaleType(ImageView.ScaleType.FIT_XY);
stampImage.setImageResource(R.drawable.stamps);
stampName.setText(stateNameArray[position]);
return v;
}
}

}

Toute suggestion?

Merci...

  • pourriez-vous poster le logcat de sortie indiquant la NullPointerException?
  • merci pour la réponse, je suis désolé, je ne suis pas arriver nullpointer regardig base de données. mais dans Mon stateNameArray je suis juste "State_Name(nom de la colonne) de la Chaîne que je mentionne comme une Chaîne de caractères dans databaseHelper Classe" au lieu de la colonne de données.
  • désolé j'ai mal lu la question! Quelle est la ligne: stateNameArray = new String[]LoveGodDB.STATE_NAME censé pour faire?
InformationsquelleAutor Piyush | 2011-08-10