بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
دریافت اطلاعات از یک سرور آنلاین
کد زیر برای
ارسال اطلاعات یک مکان به سرویس API برای World weather online
فراخواندن یک تجزیه کننده XML
و بازگرداندن نتیجه تجزیه کننده به یک رشته
قابل استفاده است .
دریافت اطلاعات هوا از World weather online
package com.allmycode.services;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.widget.Toast;
public class MyWeatherService extends Service {
Messenger messengerToClient = null;
MyIncomingHandler myIncomingHandler = new MyIncomingHandler();
Messenger messengerToService = new Messenger(myIncomingHandler);
@Override
public IBinder onBind(Intent intent) {
doToast(R.string.service_bound);
return messengerToService.getBinder();
}
class MyIncomingHandler extends Handler {
@Override
public void handleMessage(Message incomingMessage) {
messengerToClient = incomingMessage.replyTo;
Bundle reply = new Bundle();
reply.putString("weather", getWeatherString(incomingMessage));
Message replyMessage = Message.obtain();
replyMessage.setData(reply);
try {
messengerToClient.send(replyMessage);
} catch (RemoteException e) {
e.printStackTrace();
}
doToast(R.string.message_handled);
}
}
@Override
public boolean onUnbind(Intent intent) {
doToast(R.string.service_stopped_itself);
stopSelf();
return false;
}
@Override
public void onDestroy() {
myIncomingHandler = null;
doToast(R.string.service_destroyed);
}
void doToast(int resource) {
Toast.makeText(this, resource, Toast.LENGTH_SHORT).show();
}
String getWeatherString(Message message) {
Bundle query = message.getData();
String location = query.getString("location");
String weatherString;
if (location != null && !location.equals("")) {
Weather weather = getWeather(location);
weatherString = Integer.toString(weather.getTemperature())
+ (char) 0x00B0 + "F " + weather.getCondition();
} else {
weatherString = "It's dark at night.";
}
return weatherString;
}
private static final String GOOGLE_WEATHER_URL = "http://www.google.com/ig/api?weather=";
public Weather getWeather(String location) {
URL url;
Weather weather = null;
try {
url = new URL(GOOGLE_WEATHER_URL + location.replace(" ", "%20"));
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
XMLReader reader = parser.getXMLReader();
MySaxHandler saxHandler = new MySaxHandler();
reader.setContentHandler(saxHandler);
reader.parse(new InputSource(url.openStream()));
weather = saxHandler.getWeather();
} catch (Exception e) {
e.printStackTrace();
}
return weather;
}
}
برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال
aliakbar333
11 سال پیش
+1
0
لیست تجزیه XML
package com.allmycode.services;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MySaxHandler extends DefaultHandler {
private static final String CURRENT_CONDITIONS =
"current_conditions";
private static final String DATA = "data";
private static final String CONDITION = "condition";
private static final String TEMP_F = "temp_f";
private Weather weather = new Weather();
private boolean current_conditions = false;
public Weather getWeather() {
return weather;
}
@Override
public void startElement(String namespaceURI,
String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals(CURRENT_CONDITIONS)) {
current_conditions = true;
} else {
if (current_conditions) {
if (localName.equals(TEMP_F)) {
String dataAttribute =
attributes.getValue(DATA);
weather.setTemperature(Integer
.parseInt(dataAttribute));
} else if (localName.equals(CONDITION)) {
String condAttribute =
attributes.getValue(DATA);
weather.setCondition(condAttribute);
}
}
}
}
@Override
public void endElement(String namespaceURI,
String localName, String qName) throws SAXException {
if (localName.equals(CURRENT_CONDITIONS)) {
current_conditions = false;
}
}
}
پاسخ به سوال
aliakbar333
11 سال پیش
+1
0
یک کلاس wheather
package com.allmycode.services;
public class Weather {
private int temperature = 0;
private String condition = "";
public Weather() {
}
public Integer getTemperature() {
return temperature;
}
public void setTemperature(Integer temperature) {
this.temperature = temperature;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .