2

誰かが私のやり方の誤りを見せてくれるのではないかと思います-私はこの問題に2日間苦労していて、それが変数の初期化の根本的な誤りであるに違いないことに気づきましたが...それは私のJava知識のレベルを反映しています。

区切られた文字列でデータベースの結果を取得しています。各セグメントには「null」が追加されています。初期化をどのように変更しても...まあ、2日!

クラスの見出し領域で次のことを宣言しています。

private String strListContent;
private SQLiteDatabase database;
private DatabaseHelper helper2 = new DatabaseHelper(this);
private static final String fields[] = { "_id", "listTitle", "listType",
        "listContent", "dateCreated", "dateModified" };
private ArrayList<String> textArray = new ArrayList<String>();
private ArrayList<Integer> imageArray = new ArrayList<Integer>();

次に、アイテムを連結します

final ImageButton addItem = (ImageButton) findViewById(R.id.btnToAddItem);
addItem.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
    itemEdit = (EditText) findViewById(R.id.editTextItem);

    if (itemEdit.getText().toString().equals("")) {
        showToastMessage("Please enter an item to add...");

    } else {

        String newListItem = itemEdit.getText().toString();
        strListContent += newListItem + "|~|";

...
}}}

私は次の最低限のSQLiteOpenHelperを使用しています。

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String KEY_ID = "_id";

public DatabaseHelper(Context context) {
    super(context, "Cursor", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE IF NOT EXISTS list_data ("
            + KEY_ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, listTitle TEXT, listType TEXT,    listContent TEXT, dateCreated TEXT, dateModified TEXT)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Steps to upgrade the database for the new version ...
}
}

そのように値を挿入するには:

ImageButton saveAndBack = (ImageButton) findViewById(R.id.btnSaveBack);
saveAndBack.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {

        String title = null;
        String listContent = null;
        Calendar javaCalendar = null;

        title = titleEdit.getText().toString();
        title = (title=="" || title==null)?"Untitled List":title;
        strListContent = (strListContent=="" || strListContent==null)?"No Items|~|":strListContent;
        listContent = strListContent;
        String type = "R"; //"Regular List"

        javaCalendar = Calendar.getInstance();
        String currentDate = javaCalendar.get(Calendar.MONTH) + "/" +   (javaCalendar.get(Calendar.DATE) + 1) + "/" + javaCalendar.get(Calendar.YEAR);

        database = helper2.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put("listTitle", title);
        values.put("listType", type);
        values.put("listContent", listContent);
        values.put("dateCreated", currentDate);
        values.put("dateModified", currentDate);

        database.insert("list_data", null, values);

        Intent i = new Intent(RegularList.this, ActivityMain.class);
        startActivity(i);

    }
});


}
//
//End of OnCreate(){}
//

次に、別のアクティビティから取得すると、次のようになります。

DatabaseHelper helper = new DatabaseHelper(this);
database = helper.getWritableDatabase();

    Cursor data = database.query("list_data", fields, null, null, null,
            null, null);
    Integer tindex = data.getColumnIndex("listTitle");
    Integer iindex = data.getColumnIndex("listType");
    Integer cindex = data.getColumnIndex("listContent");

    itemCount = 0;
    for (data.moveToFirst(); !data.isAfterLast(); data.moveToNext()) {
        showToastMessage(data.getString(cindex));
        titleArrayList.add(data.getString(tindex));

        if (data.getString(iindex) == "R") {
            imageArrayList.add(R.drawable.listview_regular);
        } else if (data.getString(iindex) == "L") {
            imageArrayList.add(R.drawable.listview_location);
        } else {
            imageArrayList.add(R.drawable.listview_regular);
        }

        itemCount++;

    }

    data.close();

...

トーストメッセージで、区切られた文字列の各項目の前に「null」が追加されていることがわかります...他の値は問題ありません。これがあまりにも冗長ではないことを願っていますが...何か推奨事項はありますか?ありがとう!

4

1 に答える 1

2

strListContent私には、最初に次の文字列を追加する前に、文字列を初期化していないように見えます。

strListContent += newListItem + "|~|";

これを行うと、観察したとおり、追加しようとしている値の前に「null」というプレフィックスが付きます。

おそらく、宣言で初期化することができます。

private String strListContent = "";
于 2013-03-26T23:54:18.110 に答える