Skip to content

Instantly share code, notes, and snippets.

@devindi
Created August 27, 2016 01:18
Show Gist options
  • Select an option

  • Save devindi/81a6f8b522729fbc70aa889a7b336b27 to your computer and use it in GitHub Desktop.

Select an option

Save devindi/81a6f8b522729fbc70aa889a7b336b27 to your computer and use it in GitHub Desktop.
package eu.mihin.sample;
import android.app.Application;
import android.os.AsyncTask;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
new RatesLoaderTask().execute();
}
public class RatesLoaderTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
doWork();
return null;
}
private void doWork() {
HttpURLConnection urlConnection = null;
try {
URL url = new URL("http://www.cbr.ru/scripts/XML_daily.asp");
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
parser.require(XmlPullParser.START_TAG, null, "ValCurs");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String valuteID = parser.getAttributeValue(null, "ID");
if (valuteID.equals("R01270")) {
Log.e("TEST", "INR exchange rate = " + parseExchangeRate(parser));
} else {
skip(parser);
}
}
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
} finally {
if (urlConnection != null)
urlConnection.disconnect();
}
}
private String parseExchangeRate(XmlPullParser parser) throws XmlPullParserException, IOException {
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("Value")) {
return readNodeValue(parser);
} else {
skip(parser);
}
}
throw new IllegalStateException("Can't find value");
}
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
private String readNodeValue(XmlPullParser parser) throws IOException, XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment