Java tutorial
/* * Copyright 2017 lizhaotailang * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.pagenews.zhihudaily.homepage; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v4.content.LocalBroadcastManager; import com.android.volley.VolleyError; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.pagenews.zhihudaily.bean.GuokrHandpickNews; import com.pagenews.zhihudaily.bean.StringModelImpl; import com.pagenews.zhihudaily.db.DatabaseHelper; import com.pagenews.zhihudaily.detail.DetailActivity; import com.pagenews.zhihudaily.interfaze.OnStringListener; import com.pagenews.zhihudaily.service.CacheService; import com.pagenews.zhihudaily.util.Api; import com.pagenews.zhihudaily.bean.BeanType; import com.pagenews.zhihudaily.util.NetworkState; import java.util.ArrayList; import java.util.Random; /** * Created by Lizhaotailang on 2016/9/15. */ public class GuokrPresenter implements GuokrContract.Presenter { private GuokrContract.View view; private Context context; private StringModelImpl model; private DatabaseHelper dbHelper; private SQLiteDatabase db; private ArrayList<GuokrHandpickNews.result> list = new ArrayList<GuokrHandpickNews.result>(); private Gson gson = new Gson(); public GuokrPresenter(Context context, GuokrContract.View view) { this.context = context; this.view = view; view.setPresenter(this); model = new StringModelImpl(context); dbHelper = new DatabaseHelper(context, "History.db", null, 5); db = dbHelper.getWritableDatabase(); } @Override public void startReading(int position) { GuokrHandpickNews.result item = list.get(position); context.startActivity(new Intent(context, DetailActivity.class).putExtra("type", BeanType.TYPE_GUOKR) .putExtra("id", item.getId()).putExtra("coverUrl", item.getHeadline_img()) .putExtra("title", item.getTitle())); } @Override public void feelLucky() { if (list.isEmpty()) { view.showError(); return; } startReading(new Random().nextInt(list.size())); } @Override public void start() { loadPosts(); } @Override public void loadPosts() { view.showLoading(); if (NetworkState.networkConnected(context)) { model.load(Api.GUOKR_ARTICLES, new OnStringListener() { @Override public void onSuccess(String result) { // api // ???? list.clear(); try { GuokrHandpickNews question = gson.fromJson(result, GuokrHandpickNews.class); for (GuokrHandpickNews.result re : question.getResult()) { list.add(re); if (!queryIfIDExists(re.getId())) { try { db.beginTransaction(); ContentValues values = new ContentValues(); values.put("guokr_id", re.getId()); values.put("guokr_news", gson.toJson(re)); values.put("guokr_content", ""); values.put("guokr_time", (long) re.getDate_picked()); db.insert("Guokr", null, values); values.clear(); db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); } } Intent intent = new Intent("com.marktony.zhihudaily.LOCAL_BROADCAST"); intent.putExtra("type", CacheService.TYPE_GUOKR); intent.putExtra("id", re.getId()); LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } view.showResults(list); } catch (JsonSyntaxException e) { view.showError(); } view.stopLoading(); } @Override public void onError(VolleyError error) { view.stopLoading(); view.showError(); } }); } else { Cursor cursor = db.query("Guokr", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { GuokrHandpickNews.result result = gson.fromJson( cursor.getString(cursor.getColumnIndex("guokr_news")), GuokrHandpickNews.result.class); list.add(result); } while (cursor.moveToNext()); } cursor.close(); view.stopLoading(); view.showResults(list); // // if (list.isEmpty()) { view.showError(); } } } @Override public void refresh() { loadPosts(); } private boolean queryIfIDExists(int id) { Cursor cursor = db.query("Guokr", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { if (id == cursor.getInt(cursor.getColumnIndex("guokr_id"))) { return true; } } while (cursor.moveToNext()); } cursor.close(); return false; } }