2011-04-05 111 views
0

我試圖預覽一個練習日誌,它顯示用戶在一天中執行的所有練習以及持續時間和燃燒的卡路里,最後會有當天燃燒的總卡路里。
當我第一次嘗試這樣做時,我構建了一個10行的佈局,每行都有3個文本視圖,分別表示練習名稱,持續時間和燃燒的卡路里。但是這是不切實際的,因爲用戶輸入會每天都有所不同。所以我想出了這個解決方案,我不確定它是否可以在android中完成。
請看看,並告訴我,什麼是錯的原諒我的長征介紹ListView佈局問題

佈局:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <TableLayout android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:stretchColumns="0"> 
     <TableRow android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
      <TextView android:text="Activity" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"> 
      </TextView> 
      <TextView android:layout_width="wrap_content" 
       android:text="Duration" 
       android:layout_height="wrap_content"> 
      </TextView> 
      <TextView android:layout_width="wrap_content" 
       android:text="Burned" 
       android:layout_height="wrap_content"> 
      </TextView> 
     </TableRow> 
     <TableRow android:layout_height="wrap_content" 
      android:layout_width="fill_parent"> 
     <ListView android:id="@+id/lstAct" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
     </ListView> 
     <ListView android:id="@+id/lstDur" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
     </ListView> 
     <ListView android:id="@+id/lstbrn" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
     </ListView>   
     </TableRow> 
      <TableRow android:layout_width="wrap_content" 
      android:layout_height="wrap_content">   
      <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text=" Total Burned Calories"> 
     </TextView> 
     <TextView android:id="@+id/Totbrn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
     </TextView> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text=" Kcal"> 
     </TextView> 
    </TableRow> 
     <Button android:id="@+id/addExcBtn" 
     android:layout_width="wrap_content" 
     android:text="Add another exercise" 
     android:layout_height="wrap_content"> 
     </Button>   
    </TableLayout> 
</LinearLayout> 

這是類代碼:

public class ExerciseDiary extends Activity implements OnClickListener { 
private DataBaseHelper helper; 
private ListView l1; 
private ListView l2; 
private ListView l3; 
static String[] activity; 
static Integer[] duration; 
static Integer[] burned; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test); 
     helper = new DataBaseHelper(this);  
     l1 = (ListView) findViewById(R.id.lstAct); 
     l2 = (ListView) findViewById(R.id.lstDur); 
     l3 = (ListView) findViewById(R.id.lstbrn); 
     fillArray(); 
     l1.setAdapter(new ArrayAdapter<String>(this, R.layout.items,activity)); 
     l2.setAdapter(new ArrayAdapter<Integer>(this, R.layout.items,duration)); 
     l3.setAdapter(new ArrayAdapter<Integer>(this, R.layout.items,burned)); 
      View AddButton = findViewById(R.id.addExcBtn); 
     AddButton.setOnClickListener(this);     
    } 
public void onClick(View v){ 
     switch (v.getId()) {  
      case R.id.addExcBtn: 
       startActivity(new Intent(this, Exercise.class)); 
      break;        
     } 
    } 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK){ 
     startActivity(new Intent(this, Activity_DietTracker.class)); 
     return true; 
    } 
    return false; 
} 
public void fillArray(){ 
    GregorianCalendar toDay = new GregorianCalendar(); 
    String today = AllCmnMtd.getDate(toDay); 
    activity = new String[100]; 
    duration = new Integer[100]; 
    burned = new Integer[100]; 
    int i = 0; 
     helper.openDataBase();   
    SQLiteDatabase db = helper.getReadableDatabase(); 
    Cursor c = db.rawQuery("Select * from ExerciseLog where EDate = '" + today + "'", null); 
    if(c!=null){ 
     if(c.moveToFirst()){ 
      do{ 
       activity[i] = c.getString(c.getColumnIndex("Exercise")); 
       duration[i] = c.getInt(c.getColumnIndex("Duration")); 
       burned[i] = c.getInt(c.getColumnIndex("Burned")); 
       i++; 
      }while(c.moveToNext()); 
     } 
    } 
    helper.close(); 
} 
} 

這些是錯誤:

java.lang.NullPointerException 
at android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:351) 
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
at android.widget.AbsListView.obtainView(AbsListView.java:1251) 
at android.widget.ListView.measureHeightOfChildren(ListView.java:1117) 
at android.widget.ListView.onMeasure(ListView.java:1030) 
at android.view.View.measure(View.java:7115) 
at android.widget.TableRow.measureChildBeforeLayout(TableRow.java:221) 
at android.widget.LinearLayout.measureHorizontal (LinearLayout.java:619) 
at android.widget.TableRow.onMeasure(TableRow.java:112) 
at android.view.View.measure(View.java:7115) 

和約25個其他人。

如果任何人有任何有關該信息,或者如果有另一種方式來做到這一點,請讓我知道。

謝謝

+0

我真的不知道你在那裏嘗試什麼,但我可以告訴你,你做錯了。 – 2011-04-05 18:21:28

+0

需要圍繞視圖充氣的NullPointer一些代碼。 – 2011-04-05 18:25:16

+0

首先解釋你想做什麼。然後我們都會知道你想要完成什麼。還發布拋出NullPOinter的ArrayAdapter的代碼 – apesa 2011-04-05 18:40:47

回答

0

XML只是問題的一部分。在主類中,您必須將視圖的實例聲明爲成員數據: private ListView mConversationView;

然後在你的onCreate你必須初始化指針。 mConversationView =(ListView)findViewById(R.id.in);

如果你不對後者,你會看到你的空指針。