代码之家  ›  专栏  ›  技术社区  ›  kwishnu

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

  •  2
  • kwishnu  · 技术社区  · 12 年前

    我想知道是否有人能告诉我我的方法错误——我已经为这个问题挣扎了两天,并意识到这一定是初始化变量的根本错误,但是。。。这反映了我的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 回复  |  直到 12 年前
        1
  •  2
  •   martin clayton egrunin    12 年前

    在我看来,你可能只是没有初始化字符串 strListContent 在您第一次附加到它之前:

    strListContent += newListItem + "|~|";
    

    当您这样做时,您将在试图附加的值前面获得一个前缀为“null”的前缀,正如您所观察到的那样。

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

    private String strListContent = "";