数组越界异常

时间:2011-03-12 06:13:23

标签: android

伙计们,我想尝试从http post rerquest解析xml并在arraylist中存储值并在列表视图中显示它。但是有一个错误,如ArrayOutOfBoundsException,解析时没有错误,帖子中没有错误,但我找不到错误的位置?

这是我的代码,请查看并给我建议纠正:

package com.halosys.HivAtlas;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;



public class FeaturedJobs extends Activity{
    static String str;
    ArrayList<String> name = new ArrayList<String>();
    ArrayList<String> value = new ArrayList<String>();
    ListView lv;
    Document doc;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.featuredjobs);
        lv = (ListView)findViewById(R.id.featuredjobscreen);
        TestHttpPost obj = new TestHttpPost();
        try {
            str = obj.executeHttpPost();
            //tv.setText(str);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        try {
            db = factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        InputSource inStream = new InputSource();
        inStream.setCharacterStream(new StringReader(str));
        try {
            doc = db.parse(inStream);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        NodeList nodeList = (NodeList) doc.getElementsByTagName("member");

        for(int index=0; index<nodeList.getLength();index++)
        {
            Node node = nodeList.item(index);
            if(node.getNodeType()==Node.ELEMENT_NODE)
            {
                Element element = (Element)node;
                NodeList nameNode = element.getElementsByTagName("name");
                NodeList valueNode = element.getElementsByTagName("value");
                //name = new String[nameNode.getLength()];
                //value = new String[valueNode.getLength()];
                for(int iIndex=0;iIndex<nameNode.getLength();iIndex++)
                {
                    if(nameNode.item(iIndex).getNodeType()==Node.ELEMENT_NODE)
                    {
                        Element nameElement = (Element)nameNode.item(iIndex);
                        String nameEl = nameElement.getFirstChild().getNodeValue().trim();
                        name.add(nameEl);
                        //elementArr(name);
                        System.out.println(name);

                    }
                }
                for(int vIndex=0;vIndex<valueNode.getLength();vIndex++)
                {
                    Node nodeV = valueNode.item(vIndex);
                    if(nodeV.getNodeType()==Node.ELEMENT_NODE)
                    {
                        Element valueElement = (Element)nodeV;
                        NodeList dataNode = valueElement.getElementsByTagName("int");
                        NodeList dataNode1 = valueElement.getElementsByTagName("string");
                        for(int dIndex=0;dIndex<dataNode.getLength();dIndex++)
                        {
                            if(dataNode.item(dIndex).getNodeType()==Node.ELEMENT_NODE)
                            {
                                Element datael = (Element)dataNode.item(dIndex);
                                String data = datael.getFirstChild().getNodeValue().trim();
                                value.add(data);
                            }
                        }
                        for(int dIndex=0;dIndex<dataNode1.getLength();dIndex++)
                        {
                            if(dataNode1.item(dIndex).getNodeType()==Node.ELEMENT_NODE)
                            {
                                Element datael = (Element)dataNode1.item(dIndex);
                                String data = datael.getFirstChild().getNodeValue().trim();
                                value.add(data);
                            }
                        }
                    }

                }
            }
        }
        for(int u=0;u<name.size();u++)
        {
            System.out.println(name.get(u));
            System.out.println(value.get(u));
        }
        createList();
        //lv.setAdapter(new ArrayAdapter<Object>(FeaturedJobs.this,R.layout.featuredjoblist) );

        /* ArrayList<HashMap<String,Object>> mylist = new ArrayList<HashMap<String,Object>>();
         HashMap<String,Object> map = new HashMap<String, Object>();
         for(int i=0;i<name.size();i++)
         {
         map.put("train",name.get(i));
         map.put("value",value.get(i));

         mylist.add(map);
         }
         map = new HashMap<String,Object>();
         map.put("train", R.drawable.ourcollectionbtn);

         mylist.add(map);
         map = new HashMap<String,Object>();
         map.put("train", R.drawable.postjobbtn);

         mylist.add(map);
         SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.featuredjoblist,
                 new String[] {"train","value"}, new int[] {R.id.jobtitle,R.id.dept,R.id.desc});
         lv.setAdapter(mSchedule);
         lv.setDividerHeight(2);
        // lv.setTextFilterEnabled(true); 
        // lv=getListView();
         lv.setOnItemClickListener(new OnItemClickListener() {
             public void onItemClick(AdapterView<?> parent,View view,int position,long id)
             {
                 System.out.println("Sanat");
                 Intent intent = new Intent(FeaturedJobs.this,FeaturedJobs.class);
                 startActivity(intent);
             }
        });*/
    }
    public void createList()
    {
        ArrayList<HashMap<String,Object>> mylist = new ArrayList<HashMap<String,Object>>();
         HashMap<String,Object> map = new HashMap<String, Object>();
         for(int i=0;i<name.size();i++)
         {
         map.put("train",name.get(i));
         map.put("value",value.get(i));

         mylist.add(map);
         }
         /*map = new HashMap<String,Object>();
         map.put("train", R.drawable.ourcollectionbtn);

         mylist.add(map);
         map = new HashMap<String,Object>();
         map.put("train", R.drawable.postjobbtn);

         mylist.add(map);*/
         SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.featuredjoblist,
                 new String[] {"train","value"}, new int[] {R.id.jobtitle,R.id.dept,R.id.desc});
         lv.setAdapter(mSchedule);
         lv.setDividerHeight(2);
        // lv.setTextFilterEnabled(true); 
        // lv=getListView();
         lv.setOnItemClickListener(new OnItemClickListener() {
             public void onItemClick(AdapterView<?> parent,View view,int position,long id)
             {
                 System.out.println("Sanat");
                 Intent intent = new Intent(FeaturedJobs.this,FeaturedJobs.class);
                 startActivity(intent);
             }
        });
    }


    public class TestHttpPost
    {
        public String executeHttpPost() throws Exception {
            BufferedReader in = null;
            try {
                HttpClient client = new DefaultHttpClient();
                HttpPost request = new HttpPost("http://192.168.0.9/RND/press-hiv/services/xmlrpc");
                List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                postParameters.add(new BasicNameValuePair("type", "fjobs"));
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
                request.setEntity(formEntity);
                HttpResponse response = client.execute(request);
                in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer sb = new StringBuffer("");
                String line = "";
                String NL = System.getProperty("line.separator");
                while ((line = in.readLine()) != null) {
                    sb.append(line + NL);
                }
                in.close();
                String result = sb.toString();
                return result;
                } finally {
                if (in != null) {
                    try {
                        in.close();
                        } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

当你得到一个例外时,你也会得到它发生的行号。

我无法确定您的异常发生在哪里,因为我没有您的输入数据,但这似乎是一个问题:

for (int u = 0; u < name.size(); u++) {
    System.out.println(name.get(u));
    System.out.println(value.get(u));
}

您迭代name列表,但也打印出value个项目。