Проектирование и разработка мобильного приложения на платформе Android для поиска ближайших пунктов обмена валют

Анализ требований к функциональности и разработка приложения, направленного на поиск пунктов обмена валют. Анализ вопросов получения данных от сервера и их локальное хранение. Описание опыта взаимодействия пользователя с финальным вариантом приложения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 01.08.2017
Размер файла 690,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

int distanceColIndex = placeCursor.getColumnIndex("distance");

int usdIdColIndex = placeCursor.getColumnIndex("id_usd");

int eurIdColIndex = placeCursor.getColumnIndex("id_eur");

int gbpIdColIndex = placeCursor.getColumnIndex("id_gbp");

int buyColIndex;

int sellColIndex;

int dateColIndex;

do {

Cursor rateCursor;

HashMap<String, Place.Rate> rates = new HashMap<>();

if (placeCursor.getInt(usdIdColIndex) != 0) {

String selection = "id = ?";

String[] selectionArgs = new String[]{((Integer) placeCursor.getInt(usdIdColIndex)).toString()};

rateCursor = db.query(Const.RATE_TABLE, null, selection, selectionArgs, null, null, null);

buyColIndex = rateCursor.getColumnIndex("buy");

sellColIndex = rateCursor.getColumnIndex("sell");

dateColIndex = rateCursor.getColumnIndex("date");

rateCursor.moveToFirst();

rates.put("USD", new Place.Rate(

rateCursor.getFloat(buyColIndex),

rateCursor.getFloat(sellColIndex),

rateCursor.getString(dateColIndex)

));

rateCursor.close();

}

if (placeCursor.getInt(eurIdColIndex) != 0) {

String selection = "id = ?";

String[] selectionArgs = new String[]{((Integer) placeCursor.getInt(eurIdColIndex)).toString()};

rateCursor = db.query(Const.RATE_TABLE, null, selection, selectionArgs, null, null, null);

buyColIndex = rateCursor.getColumnIndex("buy");

sellColIndex = rateCursor.getColumnIndex("sell");

dateColIndex = rateCursor.getColumnIndex("date");

rateCursor.moveToFirst();

rates.put("EUR", new Place.Rate(

rateCursor.getFloat(buyColIndex),

rateCursor.getFloat(sellColIndex),

rateCursor.getString(dateColIndex)

));

rateCursor.close();

}

if (placeCursor.getInt(gbpIdColIndex) != 0) {

String selection = "id = ?";

String[] selectionArgs = new String[]{((Integer) placeCursor.getInt(gbpIdColIndex)).toString()};

rateCursor = db.query(Const.RATE_TABLE, null, selection, selectionArgs, null, null, null);

buyColIndex = rateCursor.getColumnIndex("buy");

sellColIndex = rateCursor.getColumnIndex("sell");

dateColIndex = rateCursor.getColumnIndex("date");

rateCursor.moveToFirst();

rates.put("GBP", new Place.Rate(

rateCursor.getFloat(buyColIndex),

rateCursor.getFloat(sellColIndex),

rateCursor.getString(dateColIndex)

));

rateCursor.close();

}

PlacesUtilities.addPlaceToAllPlacesList(new Place(

rates,

placeCursor.getString(bankColIndex),

placeCursor.getString(pointColIndex),

placeCursor.getString(timetableColIndex),

placeCursor.getString(addressColIndex),

new LatLng(placeCursor.getFloat(latitudeColIndex), placeCursor.getFloat(longitudeColIndex)),

placeCursor.getInt(distanceColIndex)

)

);

} while (placeCursor.moveToNext());

} else {

}

placeCursor.close();

activity.onPlacesReceived();

db.setTransactionSuccessful();

} finally {

db.endTransaction();

}

}

this.close();

}

public boolean isDatabaseEmpty(){

boolean isDatabaseEmpty = true;

db = getWritableDatabase();

db.beginTransaction();

try {

cursor = db.query("places", null, null, null, null, null, null);

if(cursor != null) {

if (cursor.moveToFirst()) isDatabaseEmpty = !isDatabaseEmpty;

}

db.setTransactionSuccessful();

} finally {

db.endTransaction();

cursor.close();

this.close();

}

return isDatabaseEmpty;

}

public void clearDatabase(){

db = getWritableDatabase();

db.beginTransaction();

try{

db.delete(Const.PLACESTABLE, null, null);

db.delete(Const.RATE_TABLE, null, null);

db.setTransactionSuccessful();

}finally {

db.endTransaction();

}

}

}

Класс MainActivity

public class MainActivity extends BaseActivity {

private DataController mController;

private int currentScreen;

public static String currentRate;

public static int currentIntent;

public static int currentFilterMode;

public static int currentSortOrder;

public static int currentLocalityId;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_maps);

SharedPreferences sharedPreferences = getSharedPreferences("Prefs", MODE_PRIVATE);

if (sharedPreferences.getAll().size() != 0){

currentScreen = sharedPreferences.getInt("currentScreen", 0);

}

else {

currentScreen = Const.SCREEN_MAP;

}

showScreen(currentScreen);

}

private void showScreen() {

switch (currentScreen) {

case Const.SCREEN_LIST :

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, ListFragment.newInstance(this), Const.FRAGMENT_TAG_LIST).commit();

break;

case Const.SCREEN_MAP :

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, MapFragment.newInstance(this), Const.FRAGMENT_TAG_MAP).commit();

break;

}

}

public void showPlaceDetails(Place place) {

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, PlaceDetailsFragment.newInstance(activity, place), Const.FRAGMENT_TAG_PLACE).commit();

}

@Override

public void onSyncronizationError() {

setProgressAnimationVisibility(false);

Snackbar snackbar = Snackbar

.make(findViewById(R.id.layout_activity_launch), getString(R.string.snack_connection_error), Snackbar.LENGTH_INDEFINITE)

.setAction(getString(R.string.snack_retry), new View.OnClickListener() {

@Override

public void onClick(View view) {

setProgressAnimationVisibility(true);

request.allPlacesRequest();

}

});

snackbar.show();

}

@Override

protected void onStop() {

SharedPreferences sharedPreferences = getSharedPreferences("Prefs", MODE_PRIVATE);

SharedPreferences.Editor editor = sharedPreferences.edit();

editor.putInt("currentScreen", currentScreen);

editor.putInt("currentIntent", currentIntent);

editor.putString("currentRate", currentRate);

editor.putInt("currentSortOrder", currentSortOrder);

editor.putInt("currentLocalityId", currentLocalityId);

editor.apply();

super.onStop();

}

/*…*/

}

Класс MapFragment

public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener {

private GoogleMap mMap;

private BaseActivity activity;

private IconGenerator iconGenerator;

public MapFragment newInstance(BaseActivity activity) {

MapFragment fragment = new MapFragment();

fragment.activity = activity;

return fragment;

}

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

super.onViewCreated(view, savedInstanceState);

initMap();

}

private void initMap(){

final SupportMapFragment fragment = SupportMapFragment.newInstance();

activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();

fragment.getMapAsync(this);

}

public void showPlaces(ArrayList<Place> places) {

for (Place place: places) {

final MarkerOptions markerOptions = new MarkerOptions()

.position(place.getLatlng())

.anchor(0.39f, 0.98f)

.icon(BitmapDescriptorFactory.fromBitmap(iconGenerator.makeIcon("", IconGenerator.IconYellow)));

Marker marker = mMap.addMarker(markerOptions);

marker.setTag(place);

}

}

@Override

public boolean onMarkerClick(Marker marker) {

((MainActivity) activity).showPlaceDetails((Place)marker.getTag());

return true;

}

@Override

public void onMapReady(GoogleMap googleMap) {

mMap = googleMap;

mMap.setOnMarkerClickListener(this);

}

}

Класс ListFragment

public class ListFragment extends Fragment{

private BaseActivity activity;

private View view;

private RecyclerView recyclerView;

private RecyclerView.Adapter listAdapter;

private int listType;

public static ListFragment newInstance(BaseActivity activity){

ListFragment listFragment = new ListFragment();

listFragment.activity = activity;

listFragment.listType = Const.LIST_PLACES;

return listFragment;

}

public static ListFragment newInstance(BaseActivity activity, int listType){

ListFragment listFragment = new ListFragment();

listFragment.activity = activity;

listFragment.listType = listType;

return listFragment;

}

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

switch (listType){

case Const.LIST_PLACES:

case Const.LIST_LOCALITIES_MAIN:

view = inflater.inflate(R.layout.fragment_list, container, false);

break;

case Const.LIST_LOCALITIES_LAUNCH:

view = inflater.inflate(R.layout.fragment_list_localities, container, false);

break;

}

return view;

}

@Override

public void onStart() {

populateList();

super.onStart();

}

public void populateList(){

if (recyclerView == null){

recyclerView = (RecyclerView)view.findViewById(R.id.recycler_view);

recyclerView.setLayoutManager(new LinearLayoutManager(activity));

}

if (listAdapter == null){

switch (listType){

case Const.LIST_PLACES:

listAdapter = new RecyclerViewAdapter(activity);

break;

case Const.LIST_LOCALITIES_LAUNCH:

case Const.LIST_LOCALITIES_MAIN:

List<String> localities = Arrays.asList(activity.getResources().getStringArray(R.array.lacalities_names));

Collections.sort(localities);

listAdapter = new LocalitiesListAdapter(activity,

Arrays.asList(activity.getResources().getStringArray(R.array.lacalities_names)),

new ArrayList<>(localities));

break;

}

} else {

listAdapter.notifyDataSetChanged();

}

recyclerView.setAdapter(listAdapter);

}

}

Приложение 2. Адрес репозитория

https://github.com/andreikulpin/CashMe

Размещено на Allbest.ru


Подобные документы

  • Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.

    дипломная работа [1,0 M], добавлен 11.07.2014

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

  • Проектирование удобного приложения для комфортной навигации по файлам облачного хранилища в одном файловом менеджере. Выбор интегрированной среды разработки. Выбор инструментов для визуализации приложения. Выбор средств отслеживания HTTPзапросов.

    курсовая работа [3,6 M], добавлен 16.07.2016

  • Разработка приложения для проверки использования времен глаголов в английском языке. Создание базы данных. Анализ используемых средств для реализации автоматического разбора текста. Проектирование мобильного приложения с помощью диаграмм деятельности.

    дипломная работа [2,6 M], добавлен 13.09.2017

  • Описание приложения в виде пользовательского сценария. Проектирование обмена сообщениями между модулями. Разработка общей структуры приложения. Обзор структуры файлов. Разработка получения данных со страницы. Характеристика результата работы программы.

    дипломная работа [1,5 M], добавлен 22.03.2018

  • Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.

    курсовая работа [987,1 K], добавлен 27.06.2019

  • Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.

    дипломная работа [1,6 M], добавлен 17.06.2017

  • Основные инструменты построения Web-приложения. Язык сценариев PHP. Системный анализ предметной области базы данных. Коды SQL запросов на создание таблиц. Разработка Web-приложения. Описание функциональности модулей. Система управления содержимым статей.

    курсовая работа [4,8 M], добавлен 28.04.2014

  • Обзор мобильной ОС Android. Выбор инструментов и технологий. Проектирование прототипа графического интерфейса. Характеристика и описание пользовательского интерфейса. Проектирование и разработка базы данных. Определение списка необходимых разрешений.

    курсовая работа [376,6 K], добавлен 13.09.2017

  • Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.

    курсовая работа [167,8 K], добавлен 18.01.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.