我正在尝试创建一个Android应用,我可以选择一个地方(一个商家)并使用Google地图打开它。我先尝试过一个数组,只是为了检查它是否有效,并且它运行正常。所以,在那之后,我想更好地创建一个只有一个表的数据库,以便在应用程序和数据库之间进行交互。数据库的名称是 dbEmpresas.db ,表的名称是 empresas 。
MainActivity.java
public class MainActivity extends Activity{
private Button conf;
private Spinner cb;
private String busqueda;
private BDAdapter bd;
private int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cb = (Spinner) findViewById(R.id.cbBizkaia);
conf = (Button)findViewById(R.id.bConf);
llenarCB();
conf = (Button)findViewById(R.id.bConf);
conf.setOnClickListener(new OnClickListener(){
public void onClick(View v){
buscarMapa(cb.getSelectedItem().toString());
}
});
}
private void llenarCB() {
try{
bd = new BDAdapter(this);
bd.open();
Cursor s = bd.getEmpresas();
String Empre[] = new String[bd.contEmp()];
//String s[] = {"Beertecni","Linersa", "Técnicas Hidráulicas"};
while(s.moveToNext()) {
Empre[i] = s.getString(0);
i++;
}
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, Empre);
cb.setAdapter(dataAdapter);
bd.close();
} catch (SQLiteException e) {
System.out.println("Error "+e);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void buscarMapa(String empresa) {
String dire = bd.getEnlace(empresa).toString();
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q="+busqueda));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
startActivity(intent);
}
}
BDAdapter.java
public class BDAdapter{
static final String TAG = "BDAdapter";
static final String DATABASE_NAME = "dbEmpresas.db";
static final int DATABASE_VERSION = 2;
final Context context;
int equiSel;
DatabaseHelper DBHelper;
SQLiteDatabase db;
public BDAdapter(Context ctx){
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public BDAdapter open() throws SQLException{
db = DBHelper.getWritableDatabase();
return this;
}
public void close(){
DBHelper.close();
}
Cursor getEmpresas(){
return db.rawQuery("SELECT nombre FROM empresas;", null);
}
Cursor getEnlace(String nombre) {
return db.rawQuery("SELECT enlace FROM empresas where nombre='"+nombre+"';", null);
}
public int contEmp(){
db = DBHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT count(*) FROM empresas;", null);
int cont = cursor.getInt(0);
db.close();
return cont;
}
}
我一直在寻找几个小时,我没有找到任何有用的东西,请帮忙吗?
logcat的
02-06 12:21:41.815: E/AndroidRuntime(962): FATAL EXCEPTION: main
02-06 12:21:41.815: E/AndroidRuntime(962): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.maps/com.example.maps.MainActivity}: android.database.sqlite.SQLiteException: no such table: empresas: , while compiling: SELECT nombre FROM empresas;
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.os.Looper.loop(Looper.java:123)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-06 12:21:41.815: E/AndroidRuntime(962): at java.lang.reflect.Method.invokeNative(Native Method)
02-06 12:21:41.815: E/AndroidRuntime(962): at java.lang.reflect.Method.invoke(Method.java:521)
02-06 12:21:41.815: E/AndroidRuntime(962): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-06 12:21:41.815: E/AndroidRuntime(962): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-06 12:21:41.815: E/AndroidRuntime(962): at dalvik.system.NativeStart.main(Native Method)
02-06 12:21:41.815: E/AndroidRuntime(962): Caused by: android.database.sqlite.SQLiteException: no such table: empresas: , while compiling: SELECT nombre FROM empresas;
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
02-06 12:21:41.815: E/AndroidRuntime(962): at com.example.maps.BDAdapter.getEmpresas(BDAdapter.java:49)
02-06 12:21:41.815: E/AndroidRuntime(962): at com.example.maps.MainActivity.llenarCB(MainActivity.java:44)
02-06 12:21:41.815: E/AndroidRuntime(962): at com.example.maps.MainActivity.onCreate(MainActivity.java:30)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-06 12:21:41.815: E/AndroidRuntime(962): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-06 12:21:41.815: E/AndroidRuntime(962): ... 11 more