2011-06-24 10 views
0

イムアンドロイドprogmmaingで初心者と私はRSSフィードを解析し、このようなタイトル、pubdateのように特定の要素を(、保存するために管理している簡単な質問コピー、特定のアイテム

をお願いしたいと思いますリンク、メディア、および説明)をデータベースに保存します。私はarraylistを使ってデータベースからデータを取り出しました。このためのコードは、0 title要素

を含むデータベースの最初の列は、今私が作成したので、タイトルのみの要素でリストビューを作成したい

public static ArrayList<Item> GetItems(AndroidDB androiddb) { 
    SQLiteDatabase DB = androiddb.getReadableDatabase(); 
    ArrayList<Item> result = new ArrayList<Item>(); 
    try {  
    Cursor c = DB.rawQuery("select * from ITEMS_TABLE", null); 
    if (c.getCount() > 0) { 
     c.moveToFirst(); 
     do { 
      result.add(new Item(
        c.getString(0), 
        c.getString(1), 
        c.getString(2), 
        c.getString(3), 
        c.getString(4))); 
     } while (c.moveToNext()); 

    } 
    c.close(); 
    DB.close(); 
} catch (SQLException e){ 
    Log.e("DATABASE", "Parsing Error", e); 

} 
return result; 

}

です私のonCreateメソッドのArrayListと私の質問は、前のArrayListからTitle要素を参照する項目だけをコピーする方法です。私はこのコード部分を書いています。特定のアイテムをコピーするためにループに書き込むものは何ですか?事前

答えて

0

 ArrayList<String> first_item = new ArrayList<String>(); 
       items=AndroidDB.GetItems(rssHandler.androiddb); 
       int numRows=items.size(); 
        for(int i=0; i < numRows; ++i) { 

       first_item.add()); 
          } 

     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, first_item)); 

        ListView lv = getListView(); 
        lv.setTextFilterEnabled(true); 

        lv.setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
         // When clicked, show a toast with the TextView text 
         Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
          Toast.LENGTH_SHORT).show(); 
        } 
        }); 
       } 

     catch (Exception e) { 
      tv.setText("Error: " + e.getMessage()); 
      Log.e(MY_DEBUG_TAG, "Parsing Error", e); 
      } 
     this.setContentView(tv); 
    } 

おかげで迅速なコメントのカップルが - まず、

if (c.getCount() > 0) { 
    c.moveToFirst(); 
    do { 
     result.add(new Item(
       c.getString(0), 
       c.getString(1), 
       c.getString(2), 
       c.getString(3), 
       c.getString(4))); 
    } while (c.moveToNext()); 
} 

は、安全に、簡単な置き換えることができます。

while (c.moveToNext()) { 
    .... 
} 

チェックする特別な理由はありませんこのようにして、カーソル上でmoveToFirst()を呼び出す必要はありません。これは単なる保守性のための提案であり、あなたの質問には答えませんが、私はあなたの将来のキーストロークを保存するためにそこに投げたかったのです。

私が正しく理解していれば、オブジェクトの複合リストから要素のリストを取得することができます - 基本的に、保持しているオブジェクトのリスト内の特定のプロパティのすべてのインスタンスで構成されるリストそのプロパティ。これを行うためのショートカットはありません。幸いにも、あなたはもっときれいに、あなたの他のコードよりも、この操作を行うことができます。

List<CompoundObjectWithAStringProperty> foo = /* go get the list */ 
List<String> allProperties = new ArrayList<String>(); 

for (CompoundObjectWithAStringProperty obj : foo) { 
    allProperties.add(obj.getStringProperty()); 
} 

あなたのコードが道の90%であるが、そのオハイオ州そうCのような。