-1

Android アプリケーションに作業データベースがあります。問題なく行を追加できます。しかし、行を更新しようとすると、データベースは間違った値を列に入れます。

私はコードを何度も調べましたが、問題を見つけることができません。おそらく、あまりにも多くのことを調べたので、明らかな問題がわかりません。問題は、データベースの行を更新するときです。値が間違った列に入れられます。すべての列に新しいデータが入力されます。しかし、それらは正しい列にありません。

次に例を示します。

// Inserting row into database gives this correct result
example: | id | column1 | column2 | column3 | column4 | column5 |
         | 1  | value1  | value2  | value3  | value4  | value5  |

// after updating the row i get this bad result:
example: | id | column1 | column2 | column3 | column4 | column5 |
         | 1  | value1  | value2  | value5  | value3  | value4  |

リストビューにデータベース column1 の値を表示してから、残りの列を別のアクティビティに送信します。リストビューの連絡先リストと考えてください。連絡先をクリックすると、残りの情報が表示されます。

私はこれでデータを送信します:

      EditContact.putExtra(MyContacts.ROW_ID, rowID);
      EditContact.putExtra("PHONE", phoneTextView.getText());
      EditContact.putExtra("EMAIL", emailTextView.getText());
      EditContact.putExtra("ADRESS", adressTextView.getText());          
      EditContact.putExtra("NAME", nameTextView.getText());
      EditContact.putExtra("COMMENT", commentTextView.getText());
      startActivity(EditContact); // start the Activity

EditContact アクティビティで、このような情報を取得し、その情報を EditTexts に入れます。

    if (extras != null) {
        rowID = extras.getLong("row_id");
        phoneEditText.setText(extras.getString("PHONE"));
        emailEditText.setText(extras.getString("EMAIL"));
        adressEditText.setText(extras.getString("ADRESS"));
        nameEditText.setText(extras.getString("NAME"));
        commentEditText.setText(extras.getString("COMMENT"));
    }

次に、次のように情報をデータベースに保存します。

         String phone   =   phoneEditText.getText().toString();
         String email   =   emailEditText.getText().toString();
         String adress  =   adressEditText.getText().toString(); 
         String name    =   nameEditText.getText().toString();
         String comment =   commentEditText.getText().toString();                 
     String spinner1 = (String) spinner1.getSelectedItem();
     String spinner2 = (String) spinner2.getSelectedItem();
     String spinner3 = (String) spinner3.getSelectedItem();

 databaseConnector.updateContact(rowID, spinner1, spinner2, spinner3, phone, email, adress, name, comment);

ご覧のとおり、ここには 3 つのスピナーがあります。データベースに連絡先を追加するときにもそれがあります。更新後も正しい列に挿入されます。これらのスピナーは、viewcontact アクティビティでテキストに変換されます。

これは、DatabaseConnector でデータベースを更新する方法です

public void updateContact(long id, String spinner1, String spinner2, String spinner 3, String phone, String email, String adress, String name, String comment)
{
    ContentValues editContact = new ContentValues();
    editContact .put("SPINNER1", spinner1);
    editContact .put("SPINNER2", spinner2);
    editContact .put("SPINNER3", spinner3);
    editContact .put("PHONE", phone);
    editContact .put("EMAIL", email);
    editContact .put("ADRESS", adress);
    editContact .put("NAME", name);
    editContact .put("COMMENT", comment);

    open();
    database.update(DATABASE_TABLE, editContact , "_id=" + id, null);
    close();
} 

誰かが何が間違っているのかについて何か考えを持っていれば、本当に感謝しています。私は単にそれを見ることができません。私はこれが初めてで、まだ学んでいますが。ありがとうございました

すべての値が、編集中の正しい行に挿入されます。しかし、間違った列にあり、エラーは発生しません。

4

1 に答える 1

0

列の順序が正しいことを確認してください。テーブル レイアウトが _id、SPINNER1、SPINNER2、SPINNER3、電話、メール、住所、名前、コメントになっていることを確認しますか? database.update のコードは何ですか? 順序が重要になる可能性があります。コードは魔法に基づいて物事の正しい順序を理解することはできません ;)

于 2012-07-17T15:43:31.777 に答える