Hello I am new to android and I currently want to implement something but do not know how to go about it. I have a service that runs in the background, it gets data from a live server and stores in an SQLite database in the app. The reason for this is I need the user to be able to access that data without having to be online.
Now After the data has been stored in the SQLite database inside the service I would like my MainActivity which contains a ListView to be able to detect any new changes that have been made on that table and display the new changes.
This is my LocalDBOpenHelper.java class:
package com.xxxxxx.eventmanager.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class LocalDBOpenHelper extends SQLiteOpenHelper {
private static final String LOGTAG = "MTGH_DB_LOG";
private static final String DATABASE_NAME = "mtgh.db";
private static final int DATABASE_VERSION = 3;
public static final String TABLE_APP_PREFERENCES = "app_info";
public static final String TABLE_ORGANISER = "organiser";
public static final String TABLE_EVENTS = "events";
public static final String TABLE_PURCHASE_INVOICES = "purchase_invoices";
public LocalDBOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
/* CREATE APP_INFO TABLE */
StringBuilder create_app_preferences_table = new StringBuilder();
create_app_preferences_table.append("CREATE TABLE `app_preferences` (");
create_app_preferences_table.append("`id` INT NOT NULL, ");
create_app_preferences_table.append("`name` VARCHAR(32) NULL, ");
create_app_preferences_table.append("`value` TEXT NULL, ");
create_app_preferences_table.append("PRIMARY KEY (`id`));");
db.execSQL(create_app_preferences_table.toString());
Log.i(LOGTAG, "App Preferences Table has been created");
/* CREATE ORGANISER TABLE */
StringBuilder create_organiser_table = new StringBuilder();
create_organiser_table.append("CREATE TABLE `organiser` (");
create_organiser_table.append("`id` INT NOT NULL, ");
create_organiser_table.append("`name` VARCHAR(64) NULL, ");
create_organiser_table.append("`email` VARCHAR(32) NULL, ");
create_organiser_table.append("`phone` VARCHAR(16) NULL, ");
create_organiser_table.append("`address` TEXT NULL, ");
create_organiser_table.append("PRIMARY KEY (`id`));");
db.execSQL(create_organiser_table.toString());
Log.i(LOGTAG, "Organiser Table has been created");
/* CREATE EVENTS TABLE */
StringBuilder create_events_table = new StringBuilder();
create_events_table.append("CREATE TABLE `events` (");
create_events_table.append("`id` INT NOT NULL, ");
create_events_table.append("`banners` text NOT NULL, ");
create_events_table.append("`name` VARCHAR(64) NOT NULL, ");
create_events_table.append("`description` text NOT NULL, ");
create_events_table.append("`category_id` int(11) NOT NULL, ");
create_events_table.append("`venue` varchar(256) NOT NULL, ");
create_events_table.append("`map_embed` text, ");
create_events_table.append("`date` date NOT NULL, ");
create_events_table.append("`date_parts` varchar(64) DEFAULT NULL, ");
create_events_table.append("`time` time NOT NULL, ");
create_events_table.append("`total_no_of_tickets` int(11) NOT NULL, ");
create_events_table.append("`no_of_available_tickets` int(11) NOT NULL, ");
create_events_table.append("`sales_end_date` date DEFAULT NULL, ");
create_events_table.append("`tickets` text NOT NULL, ");
create_events_table.append("`organiser_id` smallint(6) NOT NULL, ");
create_events_table.append("`slug` varchar(256) NOT NULL, ");
create_events_table.append("`is_active` tinyint(4) DEFAULT '0', ");
create_events_table.append("`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, ");
create_events_table.append("`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, ");
create_events_table.append("PRIMARY KEY (`id`));");
db.execSQL(create_events_table.toString());
Log.i(LOGTAG, "Events Table has been created");
/* CREATE PURCHASE_INVOICES TABLE */
StringBuilder create_purchase_invoices_table = new StringBuilder();
create_purchase_invoices_table.append("CREATE TABLE `purchase_invoice_details` (");
create_purchase_invoices_table.append("`id` int(11) NOT NULL, ");
create_purchase_invoices_table.append("`user_id` int(11) DEFAULT '0', ");
create_purchase_invoices_table.append("`type` varchar(16) NOT NULL, ");
create_purchase_invoices_table.append("`vendor_id` tinyint(4) NOT NULL, ");
create_purchase_invoices_table.append("`vendor_name` varchar(32) NOT NULL, ");
create_purchase_invoices_table.append("`reference_code` varchar(16) NOT NULL, ");
create_purchase_invoices_table.append("`total_no_of_tickets` int(11) NOT NULL, ");
create_purchase_invoices_table.append("`total_tickets_amount` float NOT NULL DEFAULT '0', ");
create_purchase_invoices_table.append("`total_extras_amount` float NOT NULL DEFAULT '0', ");
create_purchase_invoices_table.append("`total_amount_billed` float NOT NULL, ");
create_purchase_invoices_table.append("`total_charges_applied` float NOT NULL DEFAULT '0', ");
create_purchase_invoices_table.append("`total_discounts_applied` float NOT NULL DEFAULT '0', ");
create_purchase_invoices_table.append("`payment_option` varchar(16) NOT NULL, ");
create_purchase_invoices_table.append("`invoice_tickets` text NOT NULL, ");
create_purchase_invoices_table.append("`invoice_customer` text NOT NULL, ");
create_purchase_invoices_table.append("`invoice_extras` text NULL, ");
create_purchase_invoices_table.append("`verified_at` timestamp NULL DEFAULT NULL, ");
create_purchase_invoices_table.append("`cancelled_at` timestamp NULL DEFAULT NULL, ");
create_purchase_invoices_table.append("`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, ");
create_purchase_invoices_table.append("`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, ");
create_purchase_invoices_table.append("PRIMARY KEY (`id`), ");
create_purchase_invoices_table.append("UNIQUE (`reference_code`));");
db.execSQL(create_purchase_invoices_table.toString());
Log.i(LOGTAG, "Purchase Invoices Table has been created");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
Log.w("MyAppTag", "Updating database from version " + oldVersion + " to "
+ newVersion + " .Existing data will be lost.");
db.execSQL("DROP TABLE IF EXISTS `" + TABLE_APP_PREFERENCES + "`;");
db.execSQL("DROP TABLE IF EXISTS `"+TABLE_ORGANISER+"`;");
db.execSQL("DROP TABLE IF EXISTS `"+TABLE_EVENTS+"`;");
db.execSQL("DROP TABLE IF EXISTS `" + TABLE_PURCHASE_INVOICES + "`;");
onCreate(db);
}
}
}
This is my LocalDBDataSource.java class:
package com.xxxxxx.eventmanager.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class LocalDBDataSource {
private static final String LOGTAG = "MTGH_DB_LOG";
SQLiteOpenHelper dbhelper;
SQLiteDatabase database;
public LocalDBDataSource(Context context) {
dbhelper = new LocalDBOpenHelper(context);
}
public void open() {
Log.i(LOGTAG, "Database Connection Opened.");
database = dbhelper.getWritableDatabase();
}
public void close() {
Log.i(LOGTAG, "Database Connection Closed.");
dbhelper.close();
}
}
This is my MainActivity.java class which also uses a fragment:
package com.xxxxxx.eventmanager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.app.Activity;
import android.os.Handler;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.xxxxxx.eventmanager.services.UpdaterService;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
// Shared Preferences
private SharedPreferences settings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
MainActivityFragment mainFragment = new MainActivityFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.frame, mainFragment).commit();
settings = getSharedPreferences("App", MODE_PRIVATE);
Intent ishintent = new Intent(this, UpdaterService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, ishintent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(this.ALARM_SERVICE);
alarm.cancel(pintent);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),5000, pintent);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
switch (id) {
case R.id.action_settings:
Toast.makeText(MainActivity.this, "You selected the settings menu!", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
}
Aucun commentaire:
Enregistrer un commentaire