2011-08-12 11 views

Respuesta

24

podemos encontrar la temperatura de la ciudad utilizando esta clase find_Location. en el que primero encuentras la ubicación de la ciudad por el uso de longitud y latitud en Android? Y después de eso utilizar el método sendToURL para encontrar la temperatura mediante la utilización GoogleXML "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query="

public void find_Location(Context con) 
    { 
     Log.d("Find Location", "in find_location"); 
     this.con=con; 
     String location_context = Context.LOCATION_SERVICE; 
     locationManager = (LocationManager)con.getSystemService(location_context); 

     List<String> providers = locationManager.getProviders(true); 
     for (String provider : providers) 
     { 
      locationManager.requestLocationUpdates(provider, 1000, 0,new LocationListener() 
      { 
       public void onLocationChanged(Location location) {} 
       public void onProviderDisabled(String provider){} 
       public void onProviderEnabled(String provider){} 
       public void onStatusChanged(String provider, int status,Bundle extras){} 
      }); 
      Location location = locationManager.getLastKnownLocation(provider); 
      if (location != null) 
      { 
       latitude = location.getLatitude(); 
       longitude = location.getLongitude(); 
       addr=ConvertPointToLocation(latitude,longitude); 
         String temp_c=SendToUrl(addr); 

      } 
     } 
    } 

    public String ConvertPointToLocation(double pointlat,double pointlog) { 

     String address = ""; 
     Geocoder geoCoder = new Geocoder(con, 
       Locale.getDefault()); 
     try { 
      List<Address> addresses = geoCoder.getFromLocation(pointlat,pointlog, 1); 
      if (addresses.size() > 0) { 
       for (int index = 0; index < addresses.get(0) 
         .getMaxAddressLineIndex(); index++) 
        address += addresses.get(0).getAddressLine(index) + " "; 
      } 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return address; 
    } 

    private String SendToUrl(String string) { 
     // TODO Auto-generated method stub 

      try{ 
       string=string.replace(" ","%20"); 

     String queryString="http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query="+string; 
     url= new URL(queryString); 

     conec= url.openConnection(); 
     stream = conec.getInputStream(); 
     xpp = XmlPullParserFactory.newInstance().newPullParser(); 
     xpp.setInput(stream, null); 
     int eventType = xpp.getEventType(); 
     while(eventType != XmlPullParser.END_DOCUMENT) 
     { 
       if(eventType == XmlPullParser.START_TAG) 
      {String elementName = xpp.getName(); 
        if("temp_c".equals(elementName)) 
        { 
           int acount=xpp.getAttributeCount(); 
        for(int x=0;x<acount;x++) 
      { 
      xpp.getAttributeValue(x);   
         String str=xpp.getAttributeValue(x); 
        return str; 
     } 

      } 
     } 
     eventType = xpp.next(); 
    } 
} 
+0

¿Cuál es su tipos de datos para xpp, conec y stream? – hyperfkcb

2

Mi respuesta no es totalmente perfecto, pero Yahoo Weather API puede ayudarle. Esto funcionó perfectamente para mí.

En esta API debe seleccionar una ciudad y luego recibirá las actualizaciones del clima. Sin embargo, debe ir a la fuente para extraer su porción.

Espero que esto ayude.

Cuestiones relacionadas