- •Ресурсы и документация
- •Подготовка окружения
- •Установка jdk 6 Java Development Kit
- •Установка Android sdk.
- •Установка Eclipse
- •Настройка Eclipse для работы с Android проектами.
- •Создание пользовательского интерфейса
- •Создание и запуск приложения
- •Создание проекта Android
- •Запуск Android приложения в эмуляторе
- •Краткий обзор View
- •Создание activity и переходы между экранами
- •Краткая справка о интерфейсах и классах в java
- •Rest веб-сервисы, json
- •Описание веб-сервисов http://tsu.Codereign.Net/api/tsu
- •Работа с rest веб-сервисами в Android
- •Отображение диалогов
- •Хранение настроек пользователя
- •Оборудование
- •Задание на работу
- •Порядок выполнения работы
- •Оформление отчета
- •Контрольные вопросы
Отображение диалогов
Разработанная нами программа имеет очевидный недостаток: при отсутствии соединения с интернетом или неверном формате ответа от сервера мы не получим никакого уведомления. ОС Андроид имеет механизм взаимодействия с пользователями называемый Dialogs.
Рассмотрим пример создания просто диалога с текстом сообщения и кнопкой OK. Для этого используется класс AlertDialog.Builder:
private void showAlert(String messageText) {
//создаем класс билдера
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//устанавливаем заголовок диалога
builder.setMessage(messageText).setTitle("Ошибка");
//устанавливаем текст единственной кнопки
builder.setPositiveButton("OK", null);
//создаем диалог
AlertDialog dialog = builder.create();
//показываем его
dialog.show();
}
Теперь мы можем использовать данную функцию для уведомления пользователя об ошибках. Вставим везде, где это необходимо. Вот финальная версия класса TripActivity:
package com.tsu.tripcomputer;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class TripActivity extends Activity implements
OnDownloadCompletedListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trip);
Button btn = (Button) this.findViewById(R.id.btnUpdateTrip);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TripActivity.this.getCars();
}
});
}
private void getCars() {
String resourcePath = "http://tsu.codereign.net/api/tsu/cars?email=tsu1@gmail.com";
DownloadAsyncTask task = new DownloadAsyncTask("GetCarsTask");
task.setOnDownloadCompletedListener(this);
task.execute(resourcePath);
}
private void getTrip(int carId) {
String resourcePath = "http://tsu.codereign.net/api/tsu/trips?carId="
+ String.valueOf(carId);
DownloadAsyncTask task = new DownloadAsyncTask("GetTripTask");
task.setOnDownloadCompletedListener(this);
task.execute(resourcePath);
}
private void processGetCarsResult(String content) {
try {
ArrayList<Car> cars = new ArrayList<Car>();
JSONArray jsonArray = new JSONArray(content);
int length = jsonArray.length();
for (int i = 0; i < length; i++) {
cars.add(Car.createFromJSON(jsonArray.optJSONObject(i)));
}
if (cars.size() == 0) {
showAlert("Нет ни одной машины");
return;
}
Car firstCar = cars.get(0);
getTrip(firstCar.getId());
} catch (JSONException e) {
showAlert("Неверный формат данных");
}
}
private void processGetTrip(String content) {
try {
Trip trip = Trip.createFromJSON(new JSONObject(content));
TextView txtDistance = (TextView) this
.findViewById(R.id.textViewDistance);
TextView txtTime = (TextView) this.findViewById(R.id.textViewTime);
TextView txtSpeed = (TextView) this
.findViewById(R.id.textViewSpeed);
TextView txtFuel = (TextView) this.findViewById(R.id.TextViewFuel);
txtDistance.setText(String.format("%.2f", trip.getDistance()));
txtTime.setText(String.format("%.2f", trip.getTime()));
txtSpeed.setText(String.format("%.2f", trip.getSpeed()));
txtFuel.setText(String.format("%.2f", trip.getFuel()));
} catch (JSONException e) {
showAlert("Неверный формат данных");
}
}
public void onDownloadCompleted(DownloadAsyncTask task, boolean isSuccess,
String content) {
if (!isSuccess) {
showAlert("Ошибка получения данных");
return;
}
if (task.getName() == "GetCarsTask") {
this.processGetCarsResult(content);
} else if (task.getName() == "GetTripTask") {
this.processGetTrip(content);
}
}
private void showAlert(String messageText) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(messageText).setTitle("Ошибка");
builder.setPositiveButton("OK", null);
AlertDialog dialog = builder.create();
dialog.show();
}
}
Сейчас мы создали полноценное приложение, которое реализует типичные сценарии при работе с вебом, такие как получение данных с REST веб-сервисов и обработку ошибок.
