2013-10-29 73 views
-3
URL url = new URL("https://www.setindia.com"); 
URLConnection urlConnectionObject = url.openConnection(); 
xmlHandlerObject = new XMLHandler(); 
xmlReaderObject.setContentHandler(xmlHandlerObject); 
xmlReaderObject.parse(new InputSource(urlConnectionObject.getInputStream())); 
最後一行

//錯誤請給我一個解釋(新Android)和這是正確的如何解析XML中的Android使用的SAXParser HTTPS URL

主要活動:

package com.example.testparser; 

    import java.net.URL; 
    import java.net.URLConnection; 
    import java.security.KeyStore; 

    import javax.net.ssl.HttpsURLConnection; 
    import javax.net.ssl.KeyManagerFactory; 
    import javax.xml.parsers.SAXParser; 
    import javax.xml.parsers.SAXParserFactory; 

    import org.xml.sax.InputSource; 
    import org.xml.sax.XMLReader; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.Menu; 

import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    public static String TAG = "MYParser"; 

    GettersSetters getData; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.d(TAG, "OnCreate"); 

     View layout = findViewById(R.id.layout); 

     TextView tittle[]; 
     TextView country[]; 
     XMLHandler xmlHandlerObject = null; 

     try{ 
      Log.d(TAG, "try"); 
      SAXParserFactory saxParserFactoryObject = SAXParserFactory.newInstance(); //obtain and configure a SAX based parser 
      SAXParser saxParserObject = saxParserFactoryObject.newSAXParser(); //obtaining object for SAX parser 
      XMLReader xmlReaderObject = saxParserObject.getXMLReader(); 


      URL url = new URL("https://www.setindia.com/setindia_api/episode/1?date=22-10-2013&hd=1"); 
      URLConnection urlConnectionObject = url.openConnection(); 


      xmlHandlerObject = new XMLHandler(); 
      xmlReaderObject.setContentHandler(xmlHandlerObject); 

      Log.d(TAG, "about to get an error"); 

      xmlReaderObject.parse(new InputSource(urlConnectionObject.getInputStream())); 
      Log.d(TAG, "try end"); 
    } 
     catch (Exception e) { 
       Log.e(TAG, e.getMessage()); 
     } 
     Log.d(TAG, "OnCreate fetching the data from the xml"); 
     getData = xmlHandlerObject.getXMLData(); 

     tittle = new TextView[getData.getTittle().size()]; 
     country = new TextView[getData.getCountry().size()]; 

     for (int i = 0; i < getData.getTittle().size(); i++) { 

      tittle[i] = new TextView(this); 
      tittle[i].setText("ITEM is : " + getData.getTittle().get(i)); 

      country[i] = new TextView(this); 
      country[i].setText("Country is :" + getData.getTittle().get(i)); 

      ((ViewGroup) layout).addView(tittle[i]); 
      ((ViewGroup) layout).addView(country[i]); 
      setContentView(R.layout.main); 
     } 

    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

GettersSetters:

package com.example.testparser; 

import java.lang.reflect.Array; 
import java.util.ArrayList; 

import android.util.Log; 

public class GettersSetters { 
    private ArrayList<String> tittle = new ArrayList<String>(); 
    private ArrayList<String> country = new ArrayList<String>(); 

    public ArrayList<String> getCountry(){ 
     return country; 
    } 
    public ArrayList<String> getTittle(){ 

     return tittle; 
    } 
    public void setCountry(String country){ 
     this.country.add(country); 
     Log.i("This is the country : ",country); 

    } 
    public void setTittle(String tittle){ 

     this.tittle.add(tittle); 
     Log.i("This is the tittle : ",tittle); 
    } 

} 

XMLHandler:

package com.example.testparser; 
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

import android.util.Log; 


public class XMLHandler extends DefaultHandler { 

    public static String TAG = "MYParser"; 
    public static GettersSetters data = null; 
    String elementValue = null ; 
    Boolean elementOn = false; 

    public GettersSetters getXMLData(){ 
     Log.e(TAG, "getXMLdata -> "+data.toString()); 
     return data; 
    } 
    public void setXMLData(GettersSetters data){ 

     XMLHandler.data = data; 
     Log.e(TAG, "setXmldata"); 
    } 

    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 

     super.startElement(uri, localName, qName, attributes); 
     elementOn = true; 
     Log.d(TAG, "Checking the first element"+localName.equalsIgnoreCase("item")); 
     if(localName.equalsIgnoreCase("item")) 
     { 
      Log.d(TAG, "Creating a new getter setter instance"); 
      data = new GettersSetters();    
     } 
    } 
    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 
     super.characters(ch, start, length); 
     if(elementOn) 
     { 
      elementValue = new String(ch,start,length); 
      elementOn =false; 
     } 
    } 
    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 
     elementOn = false; 
     super.endElement(uri, localName, qName); 
     if(localName.equalsIgnoreCase("country")) 
      data.setCountry(elementValue); 
     if(localName.equalsIgnoreCase("tittle")) 
      data.setTittle(elementValue); 
    } 
} 

的main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="SAGAR HERE" 
     android:textSize="20dp" 
     android:gravity="center_horizontal" 
     android:id="@+id/layout" 
     /> 

</LinearLayout> 
+0

android.os.NetworkOnMainThreadException - 請勿使用異步任務或線程在主線程上執行網絡操作。 –

回答

1

不要做UI線程網絡操作(主)。 您可以使用AsyncTask,它可以正確和方便地使用UI線程。它允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序(它使用內部線程池)。更多詳情,請參閱:AsyncTask API

+0

請給我提供一個關於你的解決方案的教程的鏈接,或者請給我提供你的完整解決方案,以便我可以參考它。我只是3天到android,所以不能理解你說的話。請幫助 –

+0

只搜索Google中的AsyncTask教程。這一個很好:http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html。 –

+0

但是它用於解析HTTP,我想解析HTTPS –

相關問題