問題タブ [sqliteopenhelper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - SQLiteOpenHelper の static getApplicationContext
最近、Android アプリで疑似 ActiveRecord スタイルの db 呼び出しを作成しようとしていて、User.all(Context dbContext)、User.find(long id、Context dbContext)、User. delete(long id, Context dbContext) など。疑似 ActiveRecord とは、「実際の ActiveRecord ライブラリ」などにするつもりはないということです。コード内で理解しやすい db 呼び出しを使用したいだけで、個人的には ActiveRecord スタイルが最適です。これまでのところ非常に良好で、たとえば次のコードを使用しても問題はありません。
しかし、私が気になるのは、呼び出しを行うときに常にアクティビティコンテキストなどを渡すことであり、User クラス (User.find、User. all など) すべての db クエリのアプリケーション コンテキストを格納する静的変数? これは、アプリケーション ランチ時または最初のクエリ リクエストの前に行うことができます。
私の考えは、共有アプリケーションから常に取得するクエリのほとんどの静的コンテキスト マネージャーを取得した iOS CoreData のことから来ています。
考え、提案、アイデアはありますか?
ありがとう。
android - SqliteクエリはNullpointer例外を生成しますか?
AndroidのSqlLiteクエリがNullpointer例外を生成する理由 このコードを使用しています
android - Android: data\data にアプリ名が表示されない
AndroidでSQLiteを使用しようとしました。データベースファイルを見たいです。だから、私はAndroid File Explorer
このリンクを使用して閲覧
Data\data\App_name
しData\data
ます。アプリ名が表示されません。(以下のコードは次のようになります: com/app/TimeTracker)
テストするコードは次のとおりです。
最初は私のメインプログラムです:
そして2番目は私のデータベースヘルパーです:
上記の 2 つのファイルに問題はありますか? ある場合は、何を教えてください。そうでない場合は、この問題を解決する方法を教えてください。
ありがとう :)
@編集: データ フォルダーのスクリーンショットを追加します。(lib フォルダにファイルがありません)
string - SQLiteOpenHelper で文字列を参照する方法
SQLiteOpenHelper を拡張するアクティビティがあり、strings.xml のリソースから文字列を参照したい
私が使用するとき:
Resources res = getResources();
文字列注 = res.getString(R.string.M1Details);
エラーが表示されます: メソッド getResources() は NotesSQL.DbHelper 型に対して未定義です
私も試しました:
String Note = getString(R.string.M1Details);
そして私は得る:メソッド getString(int) は NotesSQL.DbHelper 型に対して未定義です
リソースxmlから文字列を適切に参照する方法を知りたい 事前に感謝します! :)
android - アクティビティで使用するために、データベースによって初期化された、サービスに存在する変数を参照するときの NPE
タイトルとは異なり、できるだけ明確、簡潔、そして要点を明確にするように努めます (これが TL;DR ではないことを願っています)。スタック トレースまたはデバッグ モード (Eclipse の実行中) で追跡できない NPE があります。スタック トレースは行を指していますが、何を変更しても、NPE をスローしないと実行できないようです (後で特定の行を指摘します)。つまり、Activity、SQLiteOpenHelper、および Service があります。これら 3 つのクラスに加えて、4 番目のクラスである Splash クラスのスニペットを含めます。前述のサービスは、このコードを使用して Splash クラスを介して開始されます (これを含めた理由については後で説明します)。
先に進む前に、MyService.class の変数 "ID" が別のアクティビティによって設定されていることを指摘しておくことが重要です。これについてはここでは説明しません。変数が正しく設定されること、ユーザーが変更すると正しく変更されること、そしてコードのさまざまなポイントに Log.I(TAG, TEXT) ステートメントを配置して、それが機能し、データが全体を通して一貫性を保ちます。また、サービスが正しく開始されていることも確認したので、これも問題ではありません。先に進みます。後で参照する SQLiteOpenHelper クラスのメソッドを次に示します (関連する情報のみを含めるように、コードを可能な限り削減しました)。
}
コード内の他の多くのポイントから問題なく呼び出すことができるため、データベース ハンドラーが正しく動作することを確認しました。この特定の方法も毎回機能します (実際、クラス全体が確実に機能します...この NPE がポップアップする場合を除きます)。テーブル内のデータは、省略した DB クラスの一部で初期化されます。そのすべてが同様に機能することを確認しました。したがって、先に進むには、アプリケーションのすべてのポイントでデータベース クラスが問題なく動作すると想定してください。ただし、後で説明する行を除きます。次に、次のようなサービス クラスがあります (問題のある行はここにあります。すぐに指摘します)。
}
メソッド「public void init()」では、NPE は「name = dbHelper.getData(ID, 1);」を指しています。この EXACT コード行は、アプリケーションの他の場所で使用でき、問題なく動作しますが、ここでは何度も何度も失敗します。最後に、このデータを取得するためにサービスを呼び出すアクティビティがあります。以下では、MyService.init() を呼び出しますが、ここでグレムリンが出てきます。私が何をしても、これを機能させることはできません。何らかの理由で name = dbHelper.getData(ID, 1); を使用しています。このようにして、ガスケットを吹き飛ばします。
}
基本的に、これは私を非常識にしています。目が充血するまで Android ドキュメントを読みました。グーグルを磨いた。頭の中のライトをクリックして、「ああ、それは私が間違っていることです」と言っている場所は何もありませんまた(以前にこの質問をしましたが、データを裏付けずに尋ねたので閉じられました)知りたいです新しい変数として宣言することによるサービスのインスタンス化 (MyService fooService = new MyService() を宣言することによって上記のアクティビティで行ったように) と、スプラッシュ クラスで行ったようにサービスを開始することの違い (ある場合)この質問の最初の意図。
それらの違いはありますか?サービスを呼び出すだけの場合 (つまり、すぐ上のアクティビティで fooService.name の代わりに MyService.name を使用する場合)、「name」変数を static に設定する必要があるため、インスタンス化しています。 「dbHelper」を静的に設定する必要があります... SQLiteHelperはまったく同意しません(sqliteopenhelperで非静的メソッドへの静的参照を作成できません)。
これで十分な情報だと思います。必要に応じて、スタック トレースにペーストビンを含めることができますが、警告する必要があります。上記のコードは、収まるようにかなり削除し、クラスと変数の名前を変更して、より多くの情報を作成できるようにしました。この限られた文脈での意味。Nutt シェルでは、スタック トレースは上記のアクティビティをポイントし、次に MyService.init() 行をポイントし、それは (最終的に) サービスの name = DbHelper(ID, 1) 行をポイントします。助けてくれてありがとう!!!
編集:ナットシェルでは、問題はコンテキストを渡すことと、渡すコンテキストの種類にあります。これを読んでいて、同じまたは同様の問題を抱えている人へ: SQLiteOpenHelper に渡すコンテキストを変更してみてください。
android - Android - Sqlite3 データベースを Eclipse に配置する適切な場所は?
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
この男は、Android システム パスについて次のように語っています。
//アプリケーション データベースの Android のデフォルト システム パス。
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
そしてここ:sqliteデータベースに関する他の多くのリンクのDB_PATH = "/data/data/com.android.example/databases/"。
問題は、eclipse (mac osx 10.7) がデータ ディレクトリを作成せず、motorola xoom (Android 4.0.3 - アイス クリーム サンドイッチ) でデフォルトのシステム パスを特定できないことです。Astro ファイル マネージャーを使用して /data/data/... を参照しているものは見当たりません。
私はMacを使用しているので、Androidファイルシステムアプリを使用して、apkファイルをEclipseワークスペースからmotorola xoomに転送する必要がありました。私の質問の1つは、これを置くのに適切な場所はどこですか、それとも重要ですか?
上記のリンクで説明されているように、Sqlite データベース ブラウザーを既にダウンロードして、データベースをいっぱいにしました。私は主キーを持っていません。.db ファイルをプロジェクトのアセット フォルダーにコピーしました。これもリンクの状態です。
また、私のデータベースはすでにテーブルで作成されているので、本当に私がする必要があるのは(私が推測する)誰もがいつも言及しているそのデータディレクトリにテーブルをコピーすることだけです。
これまでの私のコード:
}
android - テーブルを再作成せずに、事前に設定された sqlite データベースをデバイスにアップグレードするにはどうすればよいですか?
私は以下のコードを持っています。私のアセットフォルダーにある私のsqliteデータベースファイル(SQLite Database Browserを使用して既に作成したもの)を正しく読み取ります-デバイスの/ data/data/packagename/databases /パスに移動すると、クエリを使用してクエリを実行できますカーソルを使用して情報を取得すると、うまく機能します。ここにコード:
ここで、SQLite Brower を使用して、戻ってテーブルの 1 つ (assets フォルダー内のデータベース内) に情報の行を追加する必要がありましたが、それがカーソル出力に反映されていません。なぜこれが起こっているのか理解しています。 - if(!dbFile.exists()) が失敗するため、コピーは行われません。だから私の質問は - これを機能させるために追加する必要があるコードは何ですか? 私はコードでテーブルを作成したことがないので、 onUpgrade メソッドが私にとってどれほど役立つかわかりません。
android - Mac OSX から Windows 7 に切り替えた後、Android SQLite コードが機能しない
昨夜、私はこのコードを自宅で作業していましたが、Whatzit は役に立ちました。すべてが機能しました(dbFileの存在チェックをコメントアウトし、sqliteブラウザーを使用して行いたい変更をデータベースにコピーしました)。
今朝、タブレットを Windows 7 マシンに持ち込み、アプリケーションをアンインストールして、Eclipse から同じコードを実行しようとしました。エラーが発生し続けます:
03-12 11:51:39.320: E/AndroidRuntime(20365): 原因: java.io.IOException: データベースをコピーしようとしています - エラー: /data/data/mypackage/databases/restaurant.db: オープンに失敗しました: ENOTDIR (ディレクトリではありません)
Macでプロジェクトを圧縮し、WindowsマシンのEclipseで同じプロジェクトディレクトリに解凍し、Eclipseでリフレッシュを実行しました。
私が試すかもしれないことについて何か意見が欲しいですか?アプリをアンインストールし、.apk をコピーして再度インストールしようとしましたが、何も機能しないようです。ありがとう。
*私は実際にこれを実際のデバイスで実行しています - Motorola Xoom 4.0.3
canWrite と canRead の結果は両方とも false として返されます。ここに入力しているように、これは問題なく機能していました。eclipse と同じバージョンを実行している Windows マシンにタブレットを接続すると、違いが生じる理由がわかりません。
android - SQLiteOpenHelperがAndroidアプリケーションをクラッシュさせる
androidSDKを使用してSQLiteデータベースを処理する方法に関するチュートリアルに従いました。私の問題は、メソッド「getUsername()」を呼び出すとアプリケーションがクラッシュすることです。私は何が間違っているのですか?
android - Android SQLiteException:そのような列はありません
データベースを更新しようとしていますが、そのような列がないというエラーが発生するたびに。Ia mはまだAndroidの初心者なので、助けていただければ幸いです。
前もって感謝します。
これが私の2つのデータベースクラスです。
AreaMonitoringDB:
AreaMonitoringProvider:
私のメインアクティビティでは、以下を使用して更新します。
LOGCAT:
@SLUKIANCAnこのコードでCursorIndexOutOdBounds例外を確認してください
LOGCAT: