2014-05-08 26 views
-3

我嘗試將兩個字符串保存到一個sqlite數據庫。我想我已經用正確的方式創建了所有的東西,但是如果我嘗試用保存到db的項目來填充listview,那麼listview中沒有顯示任何項目。如何打印以登錄android? (想知道,如果我填寫一個分貝)

活動(在這裏,我嘗試添加字符串到DB)擴展SQLiteOpenHelper

private static final String DATABASE_NAME = "verlaufRechnungen.db"; 
private static final int DATABASE_VERSION = 1; 

private static final String TABLE_CREATE_VERLAUF = "" 
      + "create table Verlauf(" 
      +" ID integer primary key autoincrement, " 
      + "SCHWIERIGKEIT text, " 
      + "DATUM text)"; 

public MySQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase database) { 
    // TODO Auto-generated method stub 
    database.execSQL(TABLE_CREATE_VERLAUF); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    Log.w(MySQLiteHelper.class.getName(), "Upgrading database, which destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS SCANITEM"); 
    onCreate(db); 
} 
} 

活動格式化進入

public class Ende extends Activity implements android.view.View.OnClickListener { 

private String datum = "07.05.2014"; 
private String schwierigkeit = "Anfänger"; 

private VerlaufDataSource datasource; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.training_beendet); 

    // DB 
    datasource = new VerlaufDataSource(this); 

    try { 
     datasource.open(); 
     datasource.createEntry(schwierigkeit, datum); 
     datasource.close(); 

    } catch (Exception e) { 
     Toast.makeText(this,e.toString(), Toast.LENGTH_LONG).show(); 
    } 

} 

活動:

public class Entry { 
    private long id; 
    private String schwierigkeit; 
    private String datum; 


    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
    public String getSchwierigkeit() { 
     return schwierigkeit; 
    } 
    public void setSchwierigkeit(String schwierigkeit) { 
     this.schwierigkeit = schwierigkeit; 
    } 
    public String getDatum() { 
     return datum; 
    } 
    public void setDatum(String datum) { 
     this.datum = datum; 
    } 

    @Override 
    public String toString(){ 
     return String.format("Training: %s %s " , schwierigkeit, datum); 
    } 
} 

活動的光標:

public class VerlaufDataSource { 

    private SQLiteDatabase database; 
    private MySQLiteHelper dbhelper; 
    private String[] allColumns = { 
      "ID", "SCHWIERIGKEIT", "DATUM" }; 


    public VerlaufDataSource(Context context) { 
     dbhelper = new MySQLiteHelper(context); 
    } 

    public void open() throws SQLException { 
     database = dbhelper.getWritableDatabase(); 
    } 

    public void close() { 
     dbhelper.close(); 
    } 

    public Entry createEntry(String schwierigkeit, String datum) { 
     ContentValues values = new ContentValues(); 
     values.put("SCHWIERIGKEIT", schwierigkeit); 
     values.put("DATUM", datum); 

     long insertId = database.insert("Verlauf", null, values); 

     Cursor cursor = database.query("VERLAUF", allColumns, "ID =" + insertId, null, null, null,null); 
     cursor.moveToFirst(); 

     return cursorToEntry(cursor); 
    } 

    public List<Entry> getAllEntries() { 
     List<Entry> EntriesList = new ArrayList<Entry>(); 
     EntriesList = new ArrayList<Entry>(); 

     Cursor cursor = database.query("", allColumns, null, null, null, null, null); 
     cursor.moveToFirst(); 

     if(cursor.getCount()==0) return EntriesList; 

     while (cursor.isAfterLast() == false) { 
     Entry entry = cursorToEntry(cursor); 
     EntriesList.add(entry); 
     cursor.moveToNext(); 
     } 
     cursor.close(); 
     return EntriesList; 
    } 

    private Entry cursorToEntry(Cursor cursor) { 
     Entry entry = new Entry(); 
     entry.setId(cursor.getLong(0)); 
     entry.setSchwierigkeit(cursor.getString(1)); 
     entry.setDatum(cursor.getString(2)); 
     return entry; 
    } 
} 

最後,活動從保存的數據庫列表視圖填寫:

public class Einstellungen extends ActionBarActivity { 
    private VerlaufDataSource datasource; 
    List<Entry> TrainingList = new ArrayList<Entry>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.trainingstagebuch); 


     //DB 
     try { 
      datasource.open(); 
      TrainingList = datasource.getAllEntries(); 
      datasource.close(); 

     } catch (Exception e) { 
      Toast.makeText(this,e.toString(), Toast.LENGTH_LONG).show(); 
     } 

     ArrayAdapter<Entry> adapterVerlauf = new ArrayAdapter<>(Einstellungen.this, android.R.layout.simple_list_item_1, TrainingList); 

     ListView Verlauf = (ListView) findViewById(R.id.listview); 
     Verlauf.setAdapter(adapterVerlauf); 
    } 

現在我想知道,我如何使用打印日誌,因爲我想知道,如果我正確填寫分貝。

+0

使用android.util.log將調試消息寫入logcat。看到這裏的信息:http://stackoverflow.com/questions/2364811/ – NigelK

回答

1

學習如何閱讀登錄this

例如把這個你getAllEntries()return語句之前方法...

Log.w("VerlaufDataSource","The size of return list from databaze is: " + EntriesList.size()); 

也試圖把這個你趕上異常後Einstellungen類

List<String> list = new ArrayList<String>(); 

for(Entry e: TrainingList){ 
    list.add(e.getSchwierigkeit()); 
} 

ArrayAdapter<String> adapterVerlauf = new ArrayAdapter<>(Einstellungen.this, android.R.layout.simple_list_item_1, list); 
ListView Verlauf = (ListView) findViewById(R.id.listview); 
Verlauf.setAdapter(adapterVerlauf); 
+0

謝謝,但我得到另一個錯誤:類型不匹配:無法從ArrayAdapter 轉換爲ArrayAdapter basti12354

+0

編輯答案,現在試試。 :) –

+0

java.lang.NullPointerException,如果我嘗試打開列表視圖 – basti12354

相關問題