2017-06-23 13 views
0

私は一週間以来私の最初のスマートフォンを持っていて、Xamarinでアプリケーションを作ってみてください。Xamarin Android Sqlite Dbブラウザ

データを格納するためにSQLiteとEntityFrameworkCoreを使用します。

これはうまく動作しますが、簡単にデバッグするにはSQLiteブラウザを使用します。 データベースファイルのパスは 'data/data/{AppName} /Database.db'です。

私は物理デバイスからUSBでデバッグしますが、WindowsエクスプローラでデバッグするとSQLite DBファイルが見つかりません。 'data/data'フォルダは使用できません。それでは、SQLiteブラウザを使ってデータを見ることはできません。この記事で

、著者は、Androidエミュレータを使用し、「データ/データ」フォルダを見ることができます: https://blog.xamarin.com/building-android-apps-with-entity-framework/

しかし、私は実際のデバイスを使用することを好みます。

解決策はありますか?

開発ストア内MikeTから解決策、このような利用できるフォルダ内のDBファイル:

製造において
public static string DatabasePath 
    { 
     get 
     { 
      var dbFolder = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath; 
      var fileName = "database.db"; 
      var dbFullPath = Path.Combine(dbFolder, fileName); 
      return dbFullPath; 
     } 
    } 

は、利用できるフォルダにDBファイルをコピーします。

答えて

1

本当のデバイスの1つは、データに直接アクセスするためにデバイスをルートする必要があると思います。

ただし、データベースファイルを他の場所にコピーするなどの方法があります。外部ストレージに転送します。以下に、私が使用コアプロセスである: - :私は、(ユーザーの入力である)実際のファイル名を追加

File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),subdirectory); 
    this.directory = dir.getPath(); 

- 私はbackupfilenameのパス名を取得するために、次の使用

  try { 
        FileInputStream fis = new FileInputStream(dbfile); 
        OutputStream backup = new FileOutputStream(backupfilename); 

        //byte[] buffer = new byte[32768]; 
        int length; 
        while((length = fis.read(buffer)) > 0) { 
         backup.write(buffer, 0, length); 
        } 
        backup.flush(); 
        backup.close(); 
        fis.close(); 
       catch (IOException e) { 
        e.printStackTrace(); 
        confirmaction = false; 
       } 

注!私は私が使用するデータベースのパスを取得するにはなど、外部ストレージがマウントされていることを決定するためにチェック

を実行します -

String dbfilename = this.getDatabasePath(
      DBConstants.DATABASE_NAME).getPath(); 
    dbfile = new File(dbfilename); 

これは当然のJavaのですが、私はそれを変換することができることを前提としたいです/適合させる。答えの要点は、データベースファイルをアクセスできる場所に取得することです。

+0

ダウンロードフォルダにdbファイルを保存して使用できますか? – Orwel

+0

それはうまく動作します、ありがとうございます。詳細については私の編集した質問を参照してください。 – Orwel

0

public class FileManager 
    { 
     public string GetLocalFilePath(string filename) 
     { 
      string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
      return Path.Combine(path, filename); 
     } 
    } 

下に示すように、あなたのマニフェストファイルにandroid.permission.WRITE_EXTERNAL_STORAGE権限を追加する必要がAndroidデバイスのストレージへのパスを取得し、あなたの活動から

public void ExtractDB() 
     { 
      var szSqliteFilename = "databasename.db3"; 
      var szSourcePath = new FileManager().GetLocalFilePath(szSqliteFilename); 

      var szDatabaseBackupPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/databasename_Backup.db3"; 
      if (File.Exists(szSourcePath)) 
      { 
       File.Copy(szSourcePath, szDatabaseBackupPath, true); 
       Toast.MakeText(this, "Copied", ToastLength.Short).Show(); 
      } 
     } 

をExtractDbメソッドを呼び出し。

関連する問題