Download presentation
Presentation is loading. Please wait.
1
Tashkent Weather ANDROID CLUB 2015
2
Шаг 1: Daily Создавайте POJO – Daily. Содержит в себе:
long time; String summary; String icon; double temperatureMin; double temperatureMax; Создавайте геттеры и сеттеры
3
Решение 1: public class Daily { long time; String summary; String icon; double temperatureMin; double temperatureMax; public long getTime() { return time; } public void setTime(long time) { this.time = time; } public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public double getTemperatureMin() { return temperatureMin; } public void setTemperatureMin(double temperatureMin) { this.temperatureMin = temperatureMin; } public double getTemperatureMax() { return temperatureMax; } public void setTemperatureMax(double temperatureMax) { this.temperatureMax = temperatureMax; } }
4
Шаг 2: БД Создавайте класс – MyDatabase. Наследник класса SQLiteOpenHelper Внутри класса создавайте объект класса SQLiteDatabase Конструктор принимает Context и вызывает конструктор класса родителя. Название БД – tw. Версия – 1 В конструкторе инициализируйте db В БД создавайте таблицу – daily. time – число, основной ключ summary – текст icon – текст temperatureMin – вещественное число temperatureMax – вещественное число
5
Решение 2: БД public class MyDatabase extends SQLiteOpenHelper{ SQLiteDatabase db; public MyDatabase(Context context) { super(context, "tw", null, 1); db = getWritableDatabase(); public void onCreate(SQLiteDatabase db) { String query = "CREATE TABLE daily(time INTEGER PRIMARY KEY, summary TEXT, icon TEXT, temperatureMin REAL, temperatureMax REAL)"; db.execSQL(query); public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
6
Шаг 3: Сохранить данные В классе MyDatabase, создавайте новый метод – saveDaily Принимает лист Daily – dailyList Сохраняет их в БД
7
Решение 3: Сохранить данные
public void saveDaily(List<Daily> dailyList) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < dailyList.size(); i++) { sb.append("INSERT OR REPLACE INTO daily(time, summary, icon, temperatureMin, temperatureMax) VALUES("); Daily daily = dailyList.get(i); sb.append(daily.getTime()); sb.append(",'"); sb.append(daily.getSummary()); sb.append("','"); sb.append(daily.getIcon()); sb.append("',"); sb.append(daily.getTemperatureMin()); sb.append(","); sb.append(daily.getTemperatureMax()); sb.append(");"); } String query = sb.toString(); db.execSQL(query); }
8
Шаг 4: Получить данные Создавайте новый метод – getDaily
Ничего не принимает Возвращает лист Daily
9
Решение 4: public List<Daily> getDaily() { String query = "SELECT * FROM daily"; Cursor c = db.rawQuery(query, null); List<Daily> dailyList = new ArrayList<>(); while(c.moveToNext()) { Daily daily = new Daily(); daily.setTime(c.getLong(c.getColumnIndex("time"))); daily.setSummary(c.getString(c.getColumnIndex("summary"))); daily.setIcon(c.getString(c.getColumnIndex("icon"))); daily.setTemperatureMin(c.getDouble(c.getColumnIndex("temperatureMin"))); daily.setTemperatureMax(c.getDouble(c.getColumnIndex("temperatureMax"))); dailyList.add(daily); } return dailyList; }
10
Шаг 5: Загрузка данных Добавьте разрешение – android.permission.INTERNET Добавьте библиотеку - compile 'com.loopj.android:android-async- Создайте activity – LoadingActivity Получите данные из Получите лист Daily из json Сохраните лист в БД Переход в MainActivity
11
Решение 5: Загрузка данных
public class LoadingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loading); AsyncHttpClient client = new AsyncHttpClient(); String url = " client.get(url, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { String json = new String(responseBody); List<Daily> dailyList = new ArrayList<Daily>(); try { JSONObject object = new JSONObject(json); JSONObject daily_json_object = object.getJSONObject("daily"); JSONArray data = daily_json_object.getJSONArray("data"); for (int i = 0; i < data.length(); i++) { JSONObject data_json_object = data.getJSONObject(i); Daily daily = new Daily(); daily.setTime(data_json_object.getLong("time")); daily.setSummary(data_json_object.getString("summary")); daily.setIcon(data_json_object.getString("icon")); daily.setTemperatureMin(data_json_object.getDouble("temperatureMin")); daily.setTemperatureMax(data_json_object.getDouble("temperatureMax")); dailyList.add(daily); } } catch (JSONException e) { e.printStackTrace(); } MyDatabase database = new MyDatabase(LoadingActivity.this); database.saveDaily(dailyList); Intent intent = new Intent(LoadingActivity.this, MainActivity.class); startActivity(intent); finish(); } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { } }); } }
12
Шаг 6: Layout Создавайте layout – listitem_daily. 4 TextView tvIcon
tvWeekday tvSummary tvTemperature
13
Решение 6: Layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" xmlns:tools=" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#E8644E"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:textColor="#FFFFFF" fontPath="fonts/climacons.ttf" tools:ignore="MissingPrefix" /> <LinearLayout android:orientation="vertical" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:textColor="#FFFFFF"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:textColor="#FFFFFF"/> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:textColor="#FFFFFF"/> </LinearLayout>
14
Шаг 7: Adapter Создавайте BaseAdapter – DailyListAdapter
Принимает Сontext, лист Daily и инициализирует их Показывайте данные на listitem_daily
15
Решение 7: Adapter public class DailyListAdapter extends BaseAdapter{ Context context; List<Daily> dailyList; public DailyListAdapter(Context context, List<Daily> dailyList) { this.context = context; this.dailyList = dailyList; } @Override public int getCount() { return dailyList.size(); } @Override public Object getItem(int position) { return dailyList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Daily daily = (Daily) getItem(position); View view = parent.inflate(context, R.layout.listitem_daily, null); TextView tvIcon = (TextView) view.findViewById(R.id.tvIcon); Typeface fontFamily = Typeface.createFromAsset(context.getAssets(), "fonts/climacons.ttf"); tvIcon.setTypeface(fontFamily); tvIcon.setText(icons.get(daily.getIcon())); // tvIcon.setText("\uE001"); // tvIcon.setText(context.getString(R.string.icon)); TextView tvWeekday = (TextView) view.findViewById(R.id.tvWeekday); tvWeekday.setText(String.valueOf(daily.getTime())); TextView tvSummary = (TextView) view.findViewById(R.id.tvSummary); tvSummary.setText(daily.getSummary()); TextView tvTemperature = (TextView) view.findViewById(R.id.tvTemperature); tvTemperature.setText(daily.getTemperatureMin()+"/"+daily.getT emperatureMax()); return view; }
16
Шаг 8: Иконки snow – 9 sleet – 0 wind – B fog – < cloudy – ! partly-cloudy-day – ” partly-cloudy-night – # hail – 3 thunderstorm – F tornado – X cloud-refresh – h Вставьте climacon.ttf в папку assets/fonts/ Создавайте HashMap – icons. Добавьте clear-day – I clear-night – N rain - $ Исползуя ключ показывайте иконку на tvIcon
17
Решение 8: Иконки HashMap<String, String> icons; public DailyListAdapter(Context context, List<Daily> dailyList) { this.context = context; this.dailyList = dailyList; icons = new HashMap<>(); icons.put("clear-day", "I"); icons.put("clear-night", "N"); icons.put("rain", "$"); icons.put("snow", "9"); icons.put("sleet", "0"); icons.put("wind", "B"); icons.put("fog", "<"); icons.put("cloudy", "!"); icons.put("partly-cloudy-day", "\""); icons.put("partly-cloudy-night", "#"); icons.put("hail", "3"); icons.put("thunderstorm", "F"); icons.put("tornado", "X"); icons.put("cloud-refresh", "h"); } TextView tvIcon = (TextView) view.findViewById(R.id.tvIcon); Typeface fontFamily = Typeface.createFromAsset(context.getAssets(), "fonts/climacons.ttf"); tvIcon.setTypeface(fontFamily); tvIcon.setText(icons.get(daily.getIcon()));
18
Шаг 9: Показывать данные
Показывайте данные в MainActivity
19
Решение 9: Показывать данные
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyDatabase database = new MyDatabase(MainActivity.this); List<Daily> dailyList = database.getDaily(); ListView lvDaily = (ListView) findViewById(R.id.lvDaily); DailyListAdapter adapter = new DailyListAdapter(MainActivity.this, dailyList); lvDaily.setAdapter(adapter); } }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.