Программируем под Android, заключительная часть.
Эта статья закрывает цикл статей про получение и парсинг данных в json формате в ОС Android.
После метода doInBackground, используем метод onPostExecute, аргументом которого являются данные из первого метода.
@Override
protected void onPostExecute(String strJson)
String strJson
- автоматом передастся
//Создаём JSON объект из полученной строки.
JSONObject dJO = new JSONObject(strJson);
//Ищем значение по ключу
products = dJO.getJSONArray("products");
Потом обходим массив циклом
for (int i = 0; i < products.length(); i++)
//Получаем JSON объект по ключу
JSONObject prodInfo = products.getJSONObject(i);
добавляем в ArrayList`ы
//объявим их
final ArrayList prodList = new ArrayList();
final ArrayList prodId = new ArrayList();
//Добавим
prodList.add(prodInfo.getString("name"));
prodId.add(prodInfo.getString("id"));
Далее заполним ListView нашими данными.
Объявим ListView, добавленный в первой статье.
ListView lw = (ListView) findViewById(R.id.lists);
Объявим и заполним ArrayAdapter.
Он служит для работы с ListView.
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, prodList);
MainActivity.this
- контекст,
android.R.layout.simple_list_item_1
- XML-разметка для отдельного элемента списка
prodList
- сам массив.
Установим адаптер
lw.setAdapter(adapter)
Список мы научились формировать. Но ещё не всё. Сделаем отдельную Activity (страницу) для товара.
Вешаем обработчик, а точнее слушатель клика на элемент ListView.
lw.setOnItemClickListener(new AdapterView.OnItemClickListener()
Через параметры получаем выделенный элемент и сопутствующие данные.
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Далее
Intent intent = new Intent(MainActivity.this, ProductActivity.class);
Intent служит для вызова другой Activity.
MainActivity.this
- контекст
ProductActivity.class
- указываем явно необходимый activity.
Передаём данные в activity.
В нашем случае это id товара, по ключу - позиции в списке.
intent.putExtra("ProdInf", prodId.get(position).toString());
Запускаем новое activity
startActivity(intent);
Далее создаём ещё один activity, я его назвал ProductActivity.
В нём так же будет метод onCreate.
Получим и запишем данные переданные из другой активити
data = getIntent().getExtras().getString("ProdInf");
Создаём подобный класс, наследованный от AsyncTask. Для получения данных о товаре.
Только в цикле метода onPostExecute добавим следующее:
namep.setText(prodInfo.getString("name"));
model.setText(prodInfo.getString("model"));
itm.setText(prodInfo.getString("itm"));
itr.setText(prodInfo.getString("itr"));
До этого объявим текстовые поля:
model = (TextView) findViewById(R.id.model);
itm = (TextView) findViewById(R.id.itm);
itr = (TextView) findViewById(R.id.itr);
namep = (TextView) findViewById(R.id.name);
Вернёмся в onCreate и добавим к кнопке "Позвонить" слушатель.
bcallback = (Button) findViewById(R.id.bcallback);
bcallback.setOnClickListener(
new View.OnClickListener()
Определим один метод onClick.
И вызовем намерение.
intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+R.string.phone));
startActivity(intent);
Intent.ACTION_DIAL
- вызываем набор номера.
Uri.parse("tel:"+R.string.phone)
- устанавливаем номер телефона, в нашем случае он описан в ресурсах, в папке layouts, в strings.xml
<string name="phone">+79123456789</string>
Не забываем в AndroidManifest.xml прописать
<uses-feature android:name="android.hardware.telephony.gsm"/>
Что в итоге получилось
Материал подготовлен автором @zheev