crrayList是调用接口返回的数据,在哪里定义的?又在哪里使用的?你在getAllInfo()中用了一个线程,感觉很奇怪。最好把全部的代码贴出来解决。

解决方案 »

  1.   

    getAllInfo中的Soap.GetWebServre方法是网络操作所以放在了子线程中
      

  2.   

    分析原因就是在线程还没有执行完时候,getAllInfo早已执行完毕以后,,所以在执行for (int j = 0; j < crrayList.size(); j += 3)时候, crrayList为零行。你取出的LOGCAT是执行请求以后的返回数据,这时候setListView方法早已经走完,所以只有一行数据。截图中的一行数据来自       
           HashMap<String, String> tempHash = new HashMap<String, String>();
            tempHash.put("Cno", "Cno");
            tempHash.put("Cname", "Cname");
            tempHash.put("Cnum", "Cnum");
            list.add(tempHash);
    使用Thread应该配合Handler来使用。我把代码修改一下
        private final static int   REQUEST_SUCCESS = 1;
        private final static int   REQUEST_FALSE = 0;
        
        private void RequestData()
        {
            arrayList.clear();
            brrayList.clear();
            crrayList.clear();
            
            new Thread(new Runnable() {
                
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                 crrayList = Soap.GetWebServre("selectAllCargoInfor", arrayList, brrayList);
                    Message msg = new Message(); 
                    if(crrayList.size()>0)
                    {
                        msg.what = REQUEST_SUCCESS; 
                    }
                    else 
                    {
                     msg.what = REQUEST_FALSE; 
    }
                    // 发送消息
                    mHandler.sendMessage(msg); 
                }
            }).start();
        }
        
        public Handler mHandler = new Handler(){ 
       
           // 接收消息 
              @Override 
              public void handleMessage(Message msg) { 
                  // TODO Auto-generated method stub  
                  super.handleMessage(msg); 
                  switch (msg.what)
    {
    case REQUEST_SUCCESS:
    setListView();
    break;
    case REQUEST_FALSE:
    // 做错误处理
    break;
    default:
    break;
    }
              } 
               
          }; 
           
          private void setListView() {
              listView.setVisibility(View.VISIBLE);
              List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
              list = dbUtil.getAllInfo();
              adapter = new SimpleAdapter(MainActivity.this, list, R.layout.adapter_item, 
              new String[] { "Cno", "Cname", "Cnum" }, 
              new int[] { R.id.txt_Cno, R.id.txt_Cname, R.id.txt_Cnum });
              listView.setAdapter(adapter);
          }
          
          public List<HashMap<String, String>> getAllInfo() {
              List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
              HashMap<String, String> tempHash = new HashMap<String, String>();
              tempHash.put("Cno", "Cno");
              tempHash.put("Cname", "Cname");
              tempHash.put("Cnum", "Cnum");
              list.add(tempHash);
               
              for (int j = 0; j < crrayList.size(); j += 3) {
                  HashMap<String, String> hashMap = new HashMap<String, String>();
                  hashMap.put("Cno", crrayList.get(j));
                  hashMap.put("Cname", crrayList.get(j + 1));
                  hashMap.put("Cnum", crrayList.get(j + 2));
                  list.add(hashMap);
              }
              return list;
          }执行RequestData就可以,我没法编译,细节自己再调整看一下,应该能解决问题了。
    你给的分数太少了,大牛们都不给你解答。如果解决问题就给分哈。另外,Java多线程的操作可以系统学习一下。工作中使用极为频繁。
      

  3.   

    能不能把你源码发我一份 我最新也在搞这个 一头雾水 谢谢大神 [email protected]