質問

マイアプリケーションを使用すると、ユーザーが呼び出された最新の番号を呼び出すことができます。空のテキストボックスで "Call"ボタンを押すことによって、それは私のORMデータベースの最新の発信番号をつかみます。しかし、問題はいくつかの電話だけで発生します。

データを引っ張ったとき、次のコードを使ってそうします。

Dao<RecentCallsInfo, Integer> dao = null;
if (getActivity() instanceof MainActivity) {
    MainActivity main = (MainActivity) getActivity();
    dao = main.getDatabaseHelper().getRecentDataDao();
}

QueryBuilder<RecentCallsInfo, Integer> qb = dao.queryBuilder();
qb.orderBy(RecentCallsInfo.RECENT_COLUMN_ID, false);
qb.where().eq(RecentCallsInfo.RECENT_COLUMN_CALL_TYPE, "Outgoing");

// when you are done, prepare your query and build an iterator
CloseableIterator<RecentCallsInfo> iterator = dao.iterator(qb.prepare());

// get the raw results which can be cast under Android
AndroidDatabaseResults results = (AndroidDatabaseResults)iterator.getRawResults();
Cursor c = results.getRawCursor();

if(c.moveToFirst()){
    if(!c.getString(RecentQuery.COLUMN_NUM).isEmpty()){
        System.out.println("Recent Record: \n Name:" + c.getString(RecentQuery.COLUMN_NAME) + 
        "\nNum:" + c.getString(RecentQuery.COLUMN_NUM) + "\nNumType:" + c.getString(RecentQuery.COLUMN_NUM_TYPE)+ 
        "\nCallType:" + c.getString(RecentQuery.COLUMN_CALL_TYPE));

        etcalle.setText(c.getString(RecentQuery.COLUMN_NUM));
     }
 }

 //RecentQuery.COLUMN_NAME = 5
 //RecentQuery.COLUMN_NUM = 6
 //RecentQuery.COLUMN_NUM_TYPE = 0
 //RecentQuery.COLUMN_CALL_TYPE = 2
.

cカーソルをデバッグするときは、これらの値をこれらの列に与えます。

[recentNumberType, recentCallCost, recentCallType, recentCallerID, recentDate, recentName, recentNumber, _id]

Name:anthony
Num:(111) 111-1111
NumType:Mobile
CallType:Outgoing
.

別の電話でcカーソルを取得したとき

[recentCallCost, recentCallType, recentCallerID, recentDate, recentName, recentNumber, recentNumberType, _id]

Name:(111) 111-1111
Num:Mobile
NumType:FREE
CallType:1867
.

だから私がインデックスでデータを試して私のデータを引っ張ると、さまざまな値が得られます。なぜこれが起こるのですか?両方の電話はNexus 5と4.4.2です。

これに関する洞察は素晴らしいでしょう。ありがとう!

役に立ちましたか?

解決

列は「変更」できます。たとえば、この場合を検討してください。

  • アプリのバージョン1は、列A, C
  • でTテーブルを作成します。
  • バージョン2では、データベースの構造を変更します。そのため、[Create Table]スクリプトにB列を追加します。新しいデバイスでは、このテーブルには列A, B, Cがあります。
  • ただし、onupgrade()部分では、(Bを介して)列ALTER TABLEを追加し、構造体はA, C, Bとして終了します。

一般に、必要な列(SELECT *を使用しない)を指定しない限り、固定(「整数」)列インデックスを使用することは悪い考えです。getColumnIndex()(ループ外)の使用はより安全です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top