example:
<description>
<![CDATA[
<img src="http://l.yimg.com/a/i/us/we/52/26.gif"/><br /> <b>Current Conditions:</b><br /> Cloudy, 47 F<BR /> <BR /><b>Forecast:</b><BR /> Sun - Few Showers. High: 57 Low: 47<br /> Mon - Sunny/Wind. High: 53 Low: 30<br /> <br /> <a href="http://us.rd.yahoo.com/dailynews/rss/weather/New_York__NY/*http://weather.yahoo.com/forecast/USNY0996_f.html">Full Forecast at Yahoo! Weather</a><BR/><BR/> (provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
]]>
</description>
This example demonstrate how to retrieve description elements from Yahoo! Weather RSS feed, and display on a WebView.

package com.exercise.AndroidYahooWeatherDOM;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.Toast;
public class AndroidYahooWeatherDOMActivity extends Activity {
 
 WebView webView;
  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //weather = (TextView)findViewById(R.id.weather);
        webView = (WebView)findViewById(R.id.webview);
        
        String weatherString = QueryYahooWeather();
        Document weatherDoc = convertStringToDocument(weatherString);
        
        String weatherResult = parseWeatherDescription(weatherDoc);
        webView.loadData(weatherResult, "text/html", "UTF-8");
        
    }
    private String parseWeatherDescription(Document srcDoc){
     String weatherDescription="";
     
     NodeList nodeListDescription = srcDoc.getElementsByTagName("description");
     if(nodeListDescription.getLength()>=0){
      for(int i=0; i<nodeListDescription.getLength(); i++){
       weatherDescription += nodeListDescription.item(i).getTextContent()+"<br/>";
      }
     }else{
      weatherDescription = ("No Description!");
     }
     
     return weatherDescription;
    }
    
    private Document convertStringToDocument(String src){
     Document dest = null;
     
     DocumentBuilderFactory dbFactory =
       DocumentBuilderFactory.newInstance();
     DocumentBuilder parser;
     try {
      parser = dbFactory.newDocumentBuilder();
   dest = parser.parse(new ByteArrayInputStream(src.getBytes()));
  } catch (ParserConfigurationException e1) {
   e1.printStackTrace();
   Toast.makeText(AndroidYahooWeatherDOMActivity.this, 
        e1.toString(), Toast.LENGTH_LONG).show();
  } catch (SAXException e) {
   e.printStackTrace();
   Toast.makeText(AndroidYahooWeatherDOMActivity.this, 
        e.toString(), Toast.LENGTH_LONG).show();
  } catch (IOException e) {
   e.printStackTrace();
   Toast.makeText(AndroidYahooWeatherDOMActivity.this, 
        e.toString(), Toast.LENGTH_LONG).show();
  }
     
     return dest;
    }
    
    private String QueryYahooWeather(){
     
     String qResult = "";
     String queryString = "http://weather.yahooapis.com/forecastrss?w=2459115";
     
     HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(queryString);
        
        try {
         HttpEntity httpEntity = httpClient.execute(httpGet).getEntity();
         
         if (httpEntity != null){
          InputStream inputStream = httpEntity.getContent();
          Reader in = new InputStreamReader(inputStream);
          BufferedReader bufferedreader = new BufferedReader(in);
          StringBuilder stringBuilder = new StringBuilder();
          
          String stringReadLine = null;
          while ((stringReadLine = bufferedreader.readLine()) != null) {
           stringBuilder.append(stringReadLine + "\n"); 
          }
          
          qResult = stringBuilder.toString(); 
         }
  } catch (ClientProtocolException e) {
   e.printStackTrace();
   Toast.makeText(AndroidYahooWeatherDOMActivity.this, 
        e.toString(), Toast.LENGTH_LONG).show();
  } catch (IOException e) {
   e.printStackTrace();
   Toast.makeText(AndroidYahooWeatherDOMActivity.this, 
        e.toString(), Toast.LENGTH_LONG).show();
  }
     
        return qResult;
    }
}
Modify main.xml to add a WebView.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
 <WebView
     android:id="@+id/webview"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />
</LinearLayout>
You have to modify AndroidManifest.xml to grand permission of "android.permission.INTERNET"
 Download the files.
Download the files.Related:
- Search WOEID from http://query.yahooapis.com/.
- Get Google Weather
 
3 comments:
Ites works fine for me...
if internet is not avilable i want
show the toast messge
if(nodeListDescription.getLength()>=0){
for(int i=0; i";
}
}else{
weatherDescription = ("No Description!");
}
in this statement else condtioin
is not working how to show the
toast message without internet
nice work eric although i seem to get an error, i sent you the log file from the log cat, since i couldnt seem to find the error
contact me on my email if the logfile didnt arrive
loni_989@hotmail.com
it doesnt work
Post a Comment