#android #web-services #sqlite #caching #e-commerce
#Android #веб-сервисы #sqlite #кэширование #электронная коммерция
Вопрос:
Я новичок в разработке Android, и сейчас я разрабатываю приложение для электронной коммерции на Android для онлайн-покупок.До сих пор в этом проекте я создал корзину для хранения статей, выбранных пользователем. Но все, что я сделал, работает статически.
Теперь мне нужно связаться с сервером, чтобы получать обновления о продуктах и скидках.
Я знаю, как использовать веб-сервисы с помощью json.
1. Меня смущает, что каждый раз, когда я запускаю свое приложение, я должен взаимодействовать с сервером с помощью веб-сервиса?? или я должен хранить данные в приложении, когда приложение выполняется в первый раз на устройстве.
2. И какому подходу к хранению данных я должен следовать
Я должен сохранить его в кэше устройства или я должен сохранить его в приложениях sqlite db
Редактировать: получать данные из веб-сервиса
try {
Log.v("inside webservice call ", "1");
HttpPost request = new HttpPost(url);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
// Build JSON string
Log.v("inside webservice call ", "2");
JSONStringer JsonString = new JSONStringer().object().key("prodid")
.value("4057339").endObject();
StringEntity entity = new StringEntity(JsonString.toString());
request.setEntity(entity);
Log.v("data", JsonString.toString());
Log.v("inside webservice call ", "2");
DefaultHttpClient httpClient1 = new DefaultHttpClient();
HttpResponse response = httpClient1.execute(request);
Log.v("inside webservice call ", "3");
Log.v("response code", response.getStatusLine().getStatusCode()
"");
HttpEntity responseEntity = response.getEntity();
// Read response data into buffer
char[] buffer = new char[(int) responseEntity.getContentLength()];
InputStream stream = responseEntity.getContent();
InputStreamReader reader = new InputStreamReader(stream);
reader.read(buffer);
stream.close();
Log.v("inside webservice call ", "4");
results = new JSONObject(new String(buffer));
// Populate text fields
String message = results.getString("message");
String isvalid = results.getString("isvalid");
Log.v("tag", message isvalid);
Log.v("inside webservice call ", "5");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Я делаю это, чтобы получать данные с сервера
но невозможно поместить эти данные в базу данных sqlite, пожалуйста, направьте меня
Ответ №1:
1.I am confused about that everytime i start my application i should communicate with server using webservice ?? or should i store the data in application when application is executed for the first time on device.
Это полностью зависит от ваших требований к проекту, означает, что если данные будут часто обновляться, вы должны загружать их каждый раз, вы также можете периодически загружать данные и, если возможно, создавать одну дополнительную службу с сервера, которая уведомляет вас об обновлениях, и вам просто нужно проверять это только каждый раз.
Для изображений и других носителей вы можете сохранить их на SDCard один раз, а в следующий раз просто проверьте, существуют ли они, а затем не загружайте, это может сэкономить время вашего процесса.
2.And what approach to store data should i follow
Для хранения данных при загрузке многих конкретных и отформатированных и классифицированных данных, sqlite db будет более полезен для хранения и извлечения данных.
Комментарии:
1. хорошо, я буду использовать sqlite bt есть ли какой-нибудь способ получить данные из веб-сервиса и сохранить их в базе данных sqlite??
2. я не знаю какой-либо СПЕЦИАЛИЗИРОВАННОЙ ФУНКЦИИ в Android для этого .. я делаю это вручную, анализируя ответ и добавляя его в БД. да, для лучшей практики вы можете создавать свои собственные абстрактные классы для этого.
3. хорошо, не могли бы вы показать мне фрагмент кода для анализа ответа и добавления его в БД??
4. Я и многие другие разработчики с удовольствием поможем вам .. но я предлагаю для этого вам задать новый вопрос, чтобы другие люди, обладающие большими знаниями и опытом. тогда я смогу научить вас. и я также предлагаю ПОПРОБОВАТЬ ЧТО-нибудь, а затем опубликовать вашу проблему, потому что SO — это сайт вопросов и ответов, а не сайт для кормления ложкой. Если вы просто решите свои проблемы в Google, многие ваши сомнения будут устранены.
5. В качестве первой отправной точки для вопросов Android я бы всегда заглядывал на официальную страницу разработчика с большим количеством полезной информации и руководств: developer.android.com/guide/topics/data/data-storage.html#db
Ответ №2:
- Зависит от архитектуры вашего приложения. Если эти данные не изменяются, вы можете просто загрузить их при первом запуске, а затем повторно использовать.
- Кэш устройства? Я ничего подобного не знаю. Обычно сложные данные хранятся в базе данных. Но это действительно зависит от типа данных и ваших требований к доступу (поиск и т. Д.). Смотрите Все варианты хранения данных на Android.
Комментарии:
1. спасибо за ответ Питеру Б.Т. Не могли бы вы рассказать мне, как хранить данные, которые я получил от webservice, в базе данных sqlite
Ответ №3:
В зависимости от типа данных, которые вы храните, я бы использовал один или другой. Для кэширования двоичных данных я использую файловую систему («кэш устройства», как вы говорите), но для более сложных структур я предпочитаю использовать SQLite DB. Преимущество SQLite в том, что вы можете легко изменять свою структуру при каждом обновлении, используя хорошо известные SQL-запросы.
О, @Frankenstein, был быстрее меня: D РЕДАКТИРОВАТЬ: если вы планируете кэшировать категории и коллекции продуктов, я бы всегда использовал базу данных SQLite!
Если медиафайлы являются статическими, вы даже можете отправить их вместе с ресурсами вашего приложения. В случае, если они никогда не меняются.