Найти тему
Java и Android

Android Studion. Приложение "Курсы валют". Часть 1.

Начнем писать простое приложение для парсинга списка валют с сайта ЦБ.

Для начала просканируем указанный URL и запишем результат в виде строки, в этом нам поможет функция getResponceFromURL:

public static String getResponceFromURL(URL url) throws IOException {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = urlConnection.getInputStream();
Scanner scan = new Scanner(in);
scan.useDelimiter("\\A");

boolean hasInput = scan.hasNext();

if (hasInput) {
return scan.next();
} else {
return null;
}
} finally {
urlConnection.disconnect();
}
}

В метод useDelimiter передается строка, которую вы хотите использовать в качестве разделителя.

Следующим шагом создадим класс и расширим его классом AsyncTask:

class CBR_query extends AsyncTask<URL, Void, String> {
@Override
protected String doInBackground(URL... urls) {
String response = null;
try {
response = getResponceFromURL(urls[0]);
} catch (IOException e) {
e.printStackTrace();
}
if (response != null)
return response;
else return null;
}

В методе doInBackground (фоновый процесс) вызовем написанный ранее метод getResponceFromURL и запишем результат, который возвращает метод, в переменную response. Отправим ее в метод onPostExecute:

@Override
protected void onPostExecute(String response) {
String Name = "";
String CharCode = "";
String Value = "";
String Previous = "";
try {
JSONObject jsonResponce = new JSONObject(response);
JSONObject jsonObject = jsonResponce.getJSONObject("Valute");
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
Name = jsonObject.getJSONObject(key).getString("Name");
CharCode = jsonObject.getJSONObject(key).getString("CharCode");
Value = jsonObject.getJSONObject(key).getString("Value");
Previous = jsonObject.getJSONObject(key).getString("Previous");

System.out.println(Name + " " + CharCode + " " + Value + " " + Previous);
}
} catch (Exception e) {
e.printStackTrace();
}
}

В методе onPostExecute "превращаем" строку в JSON объект для удобства работы с данными.

Создадим отдельный метод QueryURL. Указываем адрес сайта для парсинга, в нашем случае это сайт ЦБ:

public void QueryURL() {
URL url = null;
try {
url = new URL("https://www.cbr-xml-daily.ru/daily_json.js");
query = new CBR_query();
query.execute(url);
} catch (
IOException e) {
e.printStackTrace();
}
}

Осталось добавить строку в манифест файл строку, которая разрешает приложению доступ к интернету:

<uses-permission android:name="android.permission.INTERNET"/>

Вызываем метод QueryURL в onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
QueryURL();
}

В выводе видим полученные данные.

-2

На этом первая часть закончена.