在调用时不从ArrayList中抽取正确的对象

问题描述:

我有一个程序以字节的形式接收数据流。然后它接收字节并使字符串超出有效字节。然后将这些字符串放置在一个数组列表中,并使用view.setText(arraylistname.get(int index))对数组进行调用,代码如下:messages是一个ArrayList,position是索引,readMessage是一个字符串对象在调用时不从ArrayList中抽取正确的对象

case MESSAGE_READ: 
      byte[] readBuf = (byte[]) msg.obj; 
      // construct a string from the valid bytes in the buffer 
      String readMessage = new String(readBuf, 0, msg.arg1); 
      // rpmView.setText(readMessage); 
      messages.add(readMessage); 

      int position;  
      position = 0; //position < messages.size();){ 
      int position1; 
      int position2; 
      int position3; 
      int position4; 
      int position5; 
        rpmView.setText(messages.get(position)); 
        position1 = position++; 
        tempView.setText(messages.get(position1)); 
        position2 = position1++; 
        mphView.setText(messages.get(position2)); 
        position3 = position2++; 
        gearView.setText(messages.get(position3)); 
        position4 = position3++; 
        batteryVoltageView.setText(messages.get(position4)); 
        position5 = position4++; 
        fuelLevelView.setText(messages.get(position5)); 

的问题是当读取数据流,所有字段/视图显示相同的信息,并没有更新。请帮助我做了很多关于列表视图和arrayadapters研究,但我不希望有一个垂直滚动列表,我希望文本视图随着数据的变化而更新,但布局保持不变,但值不同。

+0

尝试显示messages.l ength,我想你只是增加一个元素。 – Karan 2011-03-24 06:57:05

+0

@Karan我一次只想要一个元素。你对我的后续问题有什么看法? – user544358 2011-03-24 07:48:15

+0

编写一个从0开始到messages.length的循环,并检查消息列表中存在的值。或者添加完整的代码。 – Karan 2011-03-24 08:07:26

您需要将notifyDataSetChanged()调用到适配器的实例。在手中ler

+0

@ rohit mandiwal我没有使用适配器。你认为这是一个动态变化数组的问题吗?我不想使用listview,但我不明白如何从我的数据流中获取每个项目的新视图。当我尝试使用适配器时,它说我必须使用listview或spinner。 – user544358 2011-03-24 05:42:12

+0

我没有使用适配器。你认为这是一个动态变化数组的问题吗?我不想使用listview,但我不明白如何从我的数据流中获取每个项目的新视图。当我尝试使用适配器时,它说我必须使用listview或spinner。 – user544358 2011-03-24 07:49:30

+0

是的,你应该。 – 2011-03-24 10:03:35

这可能是您使用增量后运算符时遇到的问题。

这是发生:

// Using the post-increment operator.  
int position = 0; 
int position1, position2, position3; 
position1 = position++; // position1 = 0, position = 1 
position2 = position1++; // position2 = 0, position1 = 1 
position3 = position2++; // position3 = 0, position2 = 1 

您可能希望这样:

// Using addition.  
int position = 0; 
int position1, position2, position3; 
position1 = position + 1; // position1 = 1, position = 0 
position2 = position1 + 1; // position2 = 2, position1 = 1 
position3 = position2 + 1; // position3 = 3, position2 = 2 

或者这样:

// Using the pre-increment operator.  
int position = 0; 
int position1, position2, position3; 
position1 = ++position; // position1 = 1, position = 1 
position2 = ++position1; // position2 = 2, position1 = 2 
position3 = ++position2; // position3 = 3, position2 = 3 
+0

@ Tim Mahoney谢谢你的建议。它仍然无法正常工作。你认为我需要在case块之外调用setText方法吗? – user544358 2011-03-24 05:42:54

+0

感谢您的建议。它仍然无法正常工作。你认为我需要在case块之外调用setText方法吗? – user544358 2011-03-24 07:49:01

+0

setText方法应该在大小写块之外工作。我会像Karan说的那样去输出数据到LogCat。 – 2011-03-24 15:35:02