Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа Android.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆
    1. Отображение диалогов

Разработанная нами программа имеет очевидный недостаток: при отсутствии соединения с интернетом или неверном формате ответа от сервера мы не получим никакого уведомления. ОС Андроид имеет механизм взаимодействия с пользователями называемый 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 веб-сервисов и обработку ошибок.