“Null”附加到分隔字符串的数据库输入值

时间:2013-03-26 23:46:37

标签: android sqlite null initialization

我想知道是否有人可以向我展示我的方式的错误 - 我已经在这个问题上苦苦挣扎了两天,并且意识到它必须是初始化变量的一个根本错误,但是......这反映了我的java知识。

我在分隔字符串上获得数据库结果,其中每个段都附加了“null”。似乎无论我如何改变初始化......好吧,两天!

我在课程标题区域声明了以下内容:

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();

...

我可以在toast消息中看到,分隔字符串中的每个项目都在其前面附加了“null”...其他值都可以。我希望这不是太冗长,但是......任何建议?谢谢!

1 个答案:

答案 0 :(得分:2)

对我来说,看起来你可能在第一次追加它之前没有初始化字符串strListContent

strListContent += newListItem + "|~|";

当你这样做时,你会在你试图追加的值前面加上一个“null”前缀,就像你观察到的那样。

也许您可以在声明中初始化:

private String strListContent = "";