2011-03-31 22 views
0

Googleマップ上の特定のカフェの場所を示すアプリケーションを作成しています。私は自分のアプリがデータベースのカフェの経度と緯度を取得し、それらを使って地図上にマーカーを設定したいと思う。SQLiteデータベースからデータを取得する手助けが必要

私はSQLiteの使い方に関するチュートリアルを数多く行ってきましたが、私はデータベースを開いて管理していましたが、何も検索しませんでした。私はカーソルなどを使用してみましたが、エラーを取得し続けます。私はこれが知識の不足のためだと信じています。私はこのウェブサイトを使ってサーフィンをしてきましたが、私にとって役に立つものは何も見つかりませんでした。私はこのチュートリアルのおかげでこれまでのことが分かりました:[http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/comment-page-5/#comment-62428] [ 1]私のdbhelperがどのように見えるか

この:私のメインクラスでは

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import android.content.Context; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 

public class Databasehelper extends SQLiteOpenHelper{ 


private static String DB_PATH = "/data/data/com.map.mapguide/databases/"; 

private static String DB_NAME = "mapDB"; 

private SQLiteDatabase myDataBase; 

private final Context myContext; 



public Databasehelper(Context context) { 
    super(context, DB_NAME, null, 1); 
    this.myContext = context; 

} 

public void createDataBase() throws IOException{ 

    boolean dbExist = checkDataBase(); 

    if(dbExist){ 

    }else{ 


     this.getReadableDatabase(); 

     try { 

      copyDataBase(); 

     } catch (IOException e) { 

      throw new Error("Error copying database"); 

     } 
    } 

} 


public boolean checkDataBase(){ 

    SQLiteDatabase checkDB = null; 

    try{ 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

    }catch(SQLiteException e){ 

     //database does't exist yet. 

    } 

    if(checkDB != null){ 

     checkDB.close(); 

    } 

    return checkDB != null ? true : false; 
} 


private void copyDataBase() throws IOException{ 

    //Open your local db as the input stream 
    InputStream myInput = myContext.getAssets().open(DB_NAME); 

    // Path to the just created empty db 
    String outFileName = DB_PATH + DB_NAME; 

    //Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    //transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer))>0){ 
     myOutput.write(buffer, 0, length); 
    } 

    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

} 

public void openDataBase() throws SQLException{ 

    //Open the database 
    String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

} 

@Override 
public synchronized void close() { 

     if(myDataBase != null) 
      myDataBase.close(); 

     super.close(); 

} 

@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 

} 

}

はMapActivityを拡張します。これは私のマップ上のアクションを制御することです。データベースからデータを取得し、メインクラスの経度と緯度を設定するにはどうすればいいですか?

本当に助けていただきありがとうございます。私は約2〜3日間これをしてきましたが、私が間違っていることをまだ理解できません。 [1]:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/comment-page-5/#comment-62428

ありがとうございます!

Bami

答えて

0

このdevx tutorialはあなたを助けるかもしれません。制限なしログを使用してどのように動作するかを理解するために、ステップバイステップを進めてください。 reigndesignとdevxの両方のチュートリアルは私を大いに助けました。そして、私はContentProviderで包まれた外部的に初期化されたマルチテーブルデータベースを持っています。

まず、すべてのデータを取得し、単純なListActivityでカーソルを使用してみます。これがうまくいかず、あなたが実際にどのように理解できないのであれば、複雑さを増やすのは無意味です。

私の2セントです。

---アップデート:

私のContentProviderクラスから適応

、あなたはその後、c.getCount()をログに結果を制御し、テストすることができMYDB

Cursor c = sqlBuilder.query(
      ofopsDB, 
      projection, 
      selection, 
      selectionArgs, 
      null, 
      null, 
      sortOrder); 

に照会し、その後

CustomHelper dbHelper = new CustomHelper(context); 
    try { 
     dbHelper.createDatabase(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    myDB = dbHelper.getWritableDatabase(); 
    try { 

     dbHelper.openDatabase(); 

    }catch(SQLException sqle){ 

     throw sqle; 

    } 

を試してみてください最初の要素の内容はc.moveToFirst()です。

+0

返信いただきありがとうございます。私は前にこのチュートリアルをやって、私は自分のDBからデータを得ることができました。しかし、私が今行ったことは、SQLiteデータベースブラウザを使ってデータベースを作成することです。今問題は、私はデータを取得する方法を知らないです。 – Bami

+0

私は理解しました。私はそれをContentProvider内で成功させました。私の場合は、プロバイダのクエリメソッドでSQLiteQueryBuilderを使用します。 – Renaud

関連する問題