2013-08-29 43 views
2

我在學習如何解析XML文檔在Android.I有完整的源代碼的XML解析,但它顯示輸出在Console.But我想顯示結果數據在ListView我不知道如何顯示數據到listview.Could你能幫我解決這個問題。我在這裏給出完整的源代碼。 MainActivity.java如何在Android中顯示解析XML數據到ListView中

public class MainActivity extends Activity { 
    private ProgressDialog pDialog; 
    private ItemXMLHandler myXMLHandler; 
    private String rssFeed = "https://www.dropbox.com/s/t4o5wo6gdcnhgj8/imagelistview.xml?dl=1"; 
    private TextView textview; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textview =(TextView)findViewById(R.id.textView1); 
    } 

    public void doParsing(View v) 
    { 

     if (isNetworkAvailable()) 
     { 
      textview.setText("Loading...Please wait..."); 
      new AsyncData().execute(rssFeed); 
     } 
     else 
     { 
      showToast("No Network Connection!!!"); 
     } 
    } 
    class AsyncData extends AsyncTask<String, Void, Void> 
    { 

     @Override 
     protected void onPreExecute() 
     { 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setTitle("Loading...."); 
      pDialog.setMessage("Please wait..."); 
      pDialog.show(); 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(String... params) 
     { 

      try 
      { 
       SAXParserFactory spf = SAXParserFactory.newInstance(); 
       SAXParser sp = spf.newSAXParser(); 
       XMLReader xr = sp.getXMLReader(); 

       myXMLHandler = new ItemXMLHandler(); 
       xr.setContentHandler(myXMLHandler); 

       URL _url = new URL(params[0]); 

       xr.parse(new InputSource(_url.openStream())); 

      } catch (ParserConfigurationException pce) 
      { 
       Log.e("SAX XML", "sax parse error", pce); 
      } catch (SAXException se) 
      { 
       Log.e("SAX XML", "sax error", se); 
      } catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
      return null; 

     } 

     @Override 
     protected void onPostExecute(Void result) 
     { 
      super.onPostExecute(result); 

      textview.setText("Done!!!"); 
      if (pDialog != null && pDialog.isShowing()) 
      { 
       pDialog.dismiss(); 
      } 

      ArrayList<Bean> itemsList = myXMLHandler.getItemsList(); 
      //ArrayList<String> temp=new ArrayList<String>(); 

      if (null != itemsList && itemsList.size() != 0) 
      { 
       for (int index = 0; index < itemsList.size(); index++) 
       { 
        Bean objBean = itemsList.get(index); 

        /*System.out.println(">>>>>>>>>>>>>>>" + index); 
        System.out.println("ID :: " + objBean.getId()); 
        System.out.println("TITLE :: " + objBean.getTitle()); 
        System.out.println("DESC :: " + objBean.getDesc()); 
        System.out.println("PUBDATE :: " + objBean.getPubDate()); 
        System.out.println("LINK :: " + objBean.getLink());*/ 

        // Store values in ArrayList and Pass to the Customer Adapter class 


       } 
      } 
     } 
    } 

    public void showToast(String msg) 
    { 
     Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show(); 
    } 

    public boolean isNetworkAvailable() 
    { 
     ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity == null) 
     { 
      return false; 
     } 
     else 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
      { 
       for (int i = 0; i < info.length; i++) 
       { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 
       } 
      } 
     } 
     return false; 
    } 
} 

XmlHandlerclass

public class ItemXMLHandler extends DefaultHandler { 

    Boolean currentElement = false; 
    String currentValue = ""; 
    Bean item = null; 
    private ArrayList<Bean> itemsList = new ArrayList<Bean>(); 

    public ArrayList<Bean> getItemsList() 
    { 
     return itemsList; 
    } 

    // Called when tag starts 
    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException 
    { 

     currentElement = true; 
     currentValue = ""; 

     if (localName.equals("item")) 
     { 
      item = new Bean(); 
     } 

    } 

    // Called when tag closing 
    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException 
    { 

     currentElement = false; 

     if (localName.equals("id")) 
     { 
      item.setId(currentValue); 
     } else if (localName.equals("title")) 
     { 
      item.setTitle(currentValue); 
     } else if (localName.equals("desc")) 
     { 
      item.setDesc(currentValue); 
     } else if (localName.equals("pubDate")) 
     { 
      item.setPubDate(currentValue); 
     } else if (localName.equals("link")) 
     { 
      item.setLink(currentValue); 
     } else if (localName.equals("item")) 
     { 
      itemsList.add(item); 
     } 
    } 

    // Called to get tag characters 
    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException 
    { 

     if (currentElement) 
     { 
      currentValue = currentValue + new String(ch, start, length); 
     } 
    } 

} 

BeanClass其存儲數據

public class Bean { 

    private String id; 
    private String title; 
    private String desc; 
    private String pubDate; 
    private String link; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 

    public String getPubDate() { 
     return pubDate; 
    } 

    public void setPubDate(String pubDate) { 
     this.pubDate = pubDate; 
    } 

    public String getLink() { 
     return link; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

} 
+2

看一看的在線教程,有plently。這是一個很好的http://www.vogella.com/articles/AndroidListView/article.html – nedaRM

+0

檢查我的帖子。相應地修改 – Raghunandan

回答

3

您將需要一個列表視圖

在你main.xml中有ListView控件。自定義你想要的方式。

 <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     > 
    </ListView> 

申報的ListView作爲類成員

ListView lv; 

然後在MainActivity onCreate初始化的ListView

lv = (ListView) findViewById(R.id.listView1); 

onPostExecute

ArrayList<Bean> itemsList = myXMLHandler.getItemsList(); 
    lv.setAdapter(new CustomAdapter(MainActivity.this,itemsList)); 

有一個row.xml。根據您的要求定製。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="17dp" 
      /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/textView2" 
      android:layout_below="@+id/textView2" 
      android:layout_marginTop="26dp" 
      /> 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/textView1" 
      android:layout_below="@+id/textView1" 
      android:layout_marginTop="24dp" 
      /> 

     <TextView 
      android:id="@+id/textView4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignLeft="@+id/textView3" 
      android:layout_below="@+id/textView3" 
      android:layout_marginTop="23dp" 
      /> 

    </RelativeLayout> 

Then your CustomAdapter 

import java.util.ArrayList; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

class CustomAdapter extends BaseAdapter 
{ 
    Context mContext; 
    ArrayList<Bean> beandata; 
    LayoutInflater mInflater; 
    public CustomAdapter(Context context,ArrayList<Bean> itemList) 
    { 
     mContext = context; 
     beandata = itemList; 
     mInflater = LayoutInflater.from(context); 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return beandata.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder vh; 
     if(convertView == null) 
     { 
      vh= new ViewHolder(); 
      convertView = mInflater.inflate(R.layout.row, 
        parent, false); 
      vh.tv1 = (TextView) convertView.findViewById(R.id.textView1); 
      vh.tv2 = (TextView) convertView.findViewById(R.id.textView2); 
      vh.tv3 = (TextView) convertView.findViewById(R.id.textView3); 
      vh.tv4 = (TextView) convertView.findViewById(R.id.textView4); 
      convertView.setTag(vh); 
     } else { 
      vh = (ViewHolder) convertView.getTag(); 
     } 
      Bean objBean = beandata.get(position); 
      vh.tv1.setText(objBean.getTitle()); 
      vh.tv2.setText(objBean.getDesc()); 
      vh.tv3.setText(objBean.getPubDate()); 
      vh.tv4.setText(objBean.getLink()); 

     return convertView; 
    } 
    static class ViewHolder 
    { 
     TextView tv1,tv2,tv3,tv4; 
    } 
} 

您應該使用帶自定義適配器的列表視圖。爲listview中的每一行添加一個自定義佈局。 Listview可以回收視圖。

對於平滑滾動和性能使用視圖架

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

這是更好地使用xmlpullparser所推薦的谷歌

http://developer.android.com/training/basics/network-ops/xml.html

快照。您需要根據您的要求定製ui。

enter image description here

+0

感謝yaar.Superb.Its Working.Thanks清除我的概念 –

+0

@ user2522589很樂意提供幫助。如果有幫助,請做出積極迴應 – Raghunandan

+0

如果我面臨困難,我會與您保持聯繫。您可以給您的郵件編號。 –