2013-01-08 82 views
0

我在将ListView插入活动时遇到问题。我只是从ListActivity中插入了一个List。这工作正常。我也知道如何通过选择一行来转发到另一个活动。但是这次它不起作用。我只是尝试通过逐行进行调试,并始终检查来自LogCat的错误消息。我也是厕所。但现在我不知道该怎么办。一切似乎都在正确的地方。在活动中插入ListView

通过记录数据库中的元素(在第二个块中),我发现最后一个元素是空的。正因为如此,我减少了一个for循环。所以整个方法“initVars()”工作,直到它结束,再次返回到“onCreate”块并停止工作。我只是复制错误信息,也许这是一个知道它意味着什么的人。

public class ActivityDetail extends Activity { 

    TextView tvDefinition, tvDurationSingle, tvDurationMultiplied, tvSubunits; 
    ListView lvExecution; 
    String executions[]; 
    ArrayList<Execution> allExecutionsFromDatabase; 
    ArrayAdapter<String> adapter; 
    UserInformation userInfo = UserInformation.getInstance(); 
    MyFramework myFramework; 

    // Extras from intent 
    String definition; 
    int activityId, durationSingle, durationMultiplied, subunits; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activitydetail); 

    initVars(); 

} 

private void initVars() { 

    myFramework = new MyFramework(); 

    // load extras into variables 
    definition = myFramework.getExtrasString("activitiyDefinition", 
      getIntent().getExtras()); 
    activityId = myFramework.getExtrasInt("activityId", getIntent() 
      .getExtras()); 
    durationSingle = myFramework.getExtrasInt("activityDuration", 
      getIntent().getExtras()); 
    subunits = myFramework.getExtrasInt("activitySubunits", getIntent() 
      .getExtras()); 
    durationMultiplied = durationSingle * subunits; 

    // init ui elements 
    tvDefinition = (TextView) findViewById(R.id.tvActDetailDefinition); 
    tvDurationSingle = (TextView) findViewById(R.id.tvActDetailDurationSingle); 
    tvDurationMultiplied = (TextView) findViewById(R.id.tvActDetailDurationMultiplied); 
    tvSubunits = (TextView) findViewById(R.id.tvActDetailSubunits); 
    lvExecution = (ListView) findViewById(R.id.lvActDetail); 

    // get executions from db 
    ActivityDB entries = new ActivityDB(this); 
    entries.open(); 
    allExecutionsFromDatabase = entries.getSpecificExecutions(
      userInfo.getUserId(), activityId); 
    entries.close(); 

// set list array to same size as allExecutionsFromDatabase 
    executions = new String[allExecutionsFromDatabase.size()]; 

    // insert definition of each execution in executions for listview 
    for (int i = 0; i < allExecutionsFromDatabase.size() - 1; i++) { 
     Execution e = new Execution(); 
     e = allExecutionsFromDatabase.get(i); 
     executions[i] = e.getTimestamp(); 
     Log.e("DEFINITION", "" + e.getTimestamp()); 
    } 

// init array adapter 
    adapter = new ArrayAdapter<String>(ActivityDetail.this, 
      android.R.layout.simple_list_item_1, executions); 

    // add adapter and onClickListener to listview 
    lvExecution.setAdapter(adapter); 

    lvExecution.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      Toast.makeText(getApplicationContext(), 
        ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
      String a = ((TextView) view).getText().toString(); 
      if (a == "Foo") 
       Toast.makeText(getApplicationContext(), "Foobar! xD", 
         Toast.LENGTH_SHORT).show(); 
     } 
    }); 

} 

LOCCAT

01-08 23:55:25.361: E/AndroidRuntime(23627): FATAL EXCEPTION: main 
01-08 23:55:25.361: E/AndroidRuntime(23627): java.lang.NullPointerException 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.ListView.makeAndAddView(ListView.java:1745) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.ListView.fillDown(ListView.java:670) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.ListView.fillFromTop(ListView.java:727) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.ListView.layoutChildren(ListView.java:1598) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.View.layout(View.java:7175) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.View.layout(View.java:7175) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.View.layout(View.java:7175) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.View.layout(View.java:7175) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.View.layout(View.java:7175) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.os.Looper.loop(Looper.java:123) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at android.app.ActivityThread.main(ActivityThread.java:3683) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at java.lang.reflect.Method.invokeNative(Native Method) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at java.lang.reflect.Method.invoke(Method.java:507) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-08 23:55:25.361: E/AndroidRuntime(23627): at dalvik.system.NativeStart.main(Native Method) 
01-09 00:00:25.431: I/Process(23627): Sending signal. PID: 23627 SIG: 9 
+0

我不知道从哪里开始寻找。部分代码缺失,所以我不知道属于哪里。 –

回答

0

你不填充整个executions阵列:

executions = new String[allExecutionsFromDatabase.size()]; 

,你只迭代直到

for (int i = 0; i < allExecutionsFromDatabase.size() - 1; i++) { 

executions最后索引条目保持为空。

这是第一次瞥见 - 不知道它是否是空指针exc的原因,也是唯一的原因:)。

+0

我刚刚在我的文章开头提到,我记录了将从数据库收到的所有活动。我无法想象为什么会有更多的入口,因为我查看了shell中的db,并且还没有定位。所以我只是减少了它,因为我认为这可能会导致错误,因为未定义的活动。 –

+0

好的,你已经解决了这个问题。我减少了从数据库收到的数组大小,因此执行数组内部有一个空的空间,它表示列表的元素。非常感谢你。在相同的代码寻找几个小时,你失去了任何动机。 –