2012-06-02 103 views
1

我有一个自定义SimpleCursor listView和天文台。我试着做Chronometer(定时器)是00:10的时候绘制一行的颜色,但是抛出NullPointerException。自定义列表视图NullPointerException

感谢U代表帮助 这里是编码:

public class ListViewcursorActivity extends ListActivity { 
/** Called when the activity is first created. */ 
Chronometer timer; 
ListView lvItems; 
SimpleCursorAdapter colours; 
private testDBAdapter thisTestDBAdapter; 
LinearLayout[] Row; 
View[] v; 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    thisTestDBAdapter = new testDBAdapter(this); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    lvItems =getListView();fillData(); 

    timer = (Chronometer)findViewById(R.id.chronometer1); 

    timer.setBase(android.os.SystemClock.elapsedRealtime()); 
    timer.start(); 

    Row =new LinearLayout[lvItems.getCount()]; 
    v = new View[lvItems.getCount()]; 
    for(int i=0;i<lvItems.getChildCount();i++) { 
     v[i] =lvItems.getChildAt(i); 
     Row[i] = (LinearLayout)v[i].getParent();  
    } 
    timer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { 

     public void onChronometerTick(Chronometer chronometer) { 
      // TODO Auto-generated method stub 
      for(int i=0;i<lvItems.getChildCount();i++){ 

      // TextView child =(TextView)Row[i].getChildAt(0); 
       if( chronometer.getText().toString().equalsIgnoreCase("Timer: 00:10")){ 

        try { 
         Row[1].setBackgroundColor(Color.RED); 
        } catch (NullPointerException e) { 
         // TODO Auto-generated catch block 
         Toast.makeText(ListViewcursorActivity.this, e.toString(), Toast.LENGTH_SHORT).show(); 
        } 
       } 

      } 
    } 
    }); 
} 

问题是:// TextView的孩子=(TextView的)行[I] .getChildAt(0); 和Row [1] .setBackgroundColor(Color.RED);

06-02 17:00:57.263: E/AndroidRuntime(869): Uncaught handler: thread main exiting due to uncaught exception 
06-02 17:00:57.263: E/AndroidRuntime(869): java.lang.NullPointerException 
06-02 17:00:57.263: E/AndroidRuntime(869): at net.deneme.cursorlist.ListViewcursorActivity$1.onChronometerTick(ListViewcursorActivity.java:91) 
06-02 17:00:57.263: E/AndroidRuntime(869): at android.widget.Chronometer.dispatchChronometerTick(Chronometer.java:276) 
06-02 17:00:57.263: E/AndroidRuntime(869): at android.widget.Chronometer$1.handleMessage(Chronometer.java:268) 
06-02 17:00:57.263: E/AndroidRuntime(869): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-02 17:00:57.263: E/AndroidRuntime(869): at android.os.Looper.loop(Looper.java:123) 
06-02 17:00:57.263: E/AndroidRuntime(869): at android.app.ActivityThread.main(ActivityThread.java:4363) 
06-02 17:00:57.263: E/AndroidRuntime(869): at java.lang.reflect.Method.invokeNative(Native Method) 
06-02 17:00:57.263: E/AndroidRuntime(869): at java.lang.reflect.Method.invoke(Method.java:521) 
06-02 17:00:57.263: E/AndroidRuntime(869): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
06-02 17:00:57.263: E/AndroidRuntime(869): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
06-02 17:00:57.263: E/AndroidRuntime(869): at dalvik.system.NativeStart.main(Native Method) 
06-02 17:00:57.273: I/dalvikvm(869): threadid=7: reacting to signal 3 
06-02 17:00:57.273: E/dalvikvm(869): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 
+0

哪行你得到空指针异常.......请登录猫........ –

+0

问题是:TextView child =(TextView)Row [i] .getChildAt(0);和Row [1] .setBackgroundColor(Color.RED); – Acablack

+0

行[1]或行[i]? –

回答

1
TextView child =(TextView) Row[i].getChildAt(0); 

为什么不通过ID得到它?

LinearLayout row = (LinearLayout) Row[i]; 
if(row != null) { 
    TextView textView = (TextView) row.findViewBy(R.id.textviewid); 
    if(TextView != null) 
     //do stuff 
} 

这有帮助吗?

另外看代码什么是Row?一个Linearlayout的权利?这是一种不清楚的代码。也许组织好一点。

+0

我无法使用R.id.bla ..因为我使用动态光标列表视图; 像这里:http://androidforbeginners.blogspot.com/2010/03/clicking-buttons-in-listview-row.html – Acablack

0

空指针异常通常表示您尝试访问当前上下文中不存在的内容。

验证您的XML在Java代码中被正确引用。

+0

对不起,我不能添加XML文件。但我相信它不是关于xml文件感谢 – Acablack

0

我不能看到适配器被设置为您的onCreate任何地方的列表视图。设置适配器并查看它是否修复了问题。物品将被创建,并且一旦您设置了适配器,它们就会拥有父母。

+0

适配器是FillData() – Acablack

0

对于空指针异常,您可以使用调试来跟踪空指针异常,它可以告诉您空指针异常的发生位置。

+0

okey,我得到了为什么我得到null,它是lvItems.getChildAt(i)它发送给我null。但是我怎么能得到孩子? – Acablack