Good day. I'm new to android and was curious why my sldtl data was not inserted in my table sldtl.
this my JSON response from the server
{
"error":false,
"user":
{
"br_code":12,
"mem_id":13,
"username":"test",
"email":"test@yahoo.com"
,"created_at":"2016-07-22 09:05:21"
}
}
this response is from sl_summ this user has 2 rows in the table
{
"error":false,
"sl_summ":
{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
}
}
{
"error":false,
"sl_summ":
{
"sl_desc":"PA : Savings - Cash Bond",
"tr_date":"2015-08-28",
"actual_balance":"10129.43",
"available_balance":"10129.43"
}
}
and this is the message from the log cat
Login Response: {"error":false,"user":{"br_code":12,"mem_id":13,"username":"test","email":"test@yahoo.com","created_at":"2016-07-22 09:05:21"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}}
here is the Log message
06-23 11:53:44.998 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/RegisterActivity: Login Response: {"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@yahoo.com","created_at":"2016-07-22 09:05:21"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"}}{"error":false,"sl_summ":{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}}
06-23 11:53:45.036 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@b53457f[LoginActivity]: dispatchDetachedFromWindow
06-23 11:53:45.062 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=85
06-23 11:53:45.074 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/SessionManager: User login session modified!
06-23 11:53:45.107 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Table members and sldtl was successfully created
06-23 11:53:45.129 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: New member was inserted into table members: 13
06-23 11:53:45.169 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@528ce94[LoginActivity]: MSG_WINDOW_FOCUS_CHANGED 1
06-23 11:53:45.172 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal E/ViewRootImpl: sendUserActionEvent() mView == null
06-23 11:53:45.172 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@528ce94[LoginActivity]: MSG_WINDOW_FOCUS_CHANGED 0
06-23 11:53:45.352 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
06-23 11:53:45.542 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Fetching member's from Sqlite members table: {email=gsac_tabaco@yahoo.com, created_at=2016-07-22 09:05:21, br_code=12, mem_id=13, username=novalyn}
06-23 11:53:45.544 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Fetching member's SL details from Sqlite sldtl table: {}
06-23 11:53:45.556 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=89
06-23 11:53:45.556 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@b39019d[MainActivity]: setView = DecorView@231b612[MainActivity] touchMode=true
06-23 11:53:45.608 14719-14795/ph.coredev.johnjessbayutas.gsacmobileportal D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1080x1920]-format:1
06-23 11:53:45.667 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
06-23 11:53:45.789 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@b39019d[MainActivity]: MSG_RESIZED_REPORT: ci=Rect(0, 72 - 0, 0) vi=Rect(0, 72 - 0, 0) or=1
06-23 11:53:45.789 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@b39019d[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 1
06-23 11:53:45.792 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@64782f8 nm : ph.coredev.johnjessbayutas.gsacmobileportal ic=null
06-23 11:53:45.792 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
06-23 11:53:45.809 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=92
06-23 11:53:45.809 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=86
06-23 11:53:45.823 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
06-23 11:53:46.265 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@528ce94[LoginActivity]: dispatchDetachedFromWindow
06-23 11:53:46.289 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=75
06-23 11:54:14.005 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@a2a83d1 nm : ph.coredev.johnjessbayutas.gsacmobileportal ic=null
06-23 11:54:14.005 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
06-23 11:54:14.019 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel constructed: fd=79
06-23 11:54:14.019 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=92
06-23 11:54:19.459 14719-14719/ph.coredev.johnjessbayutas.gsacmobileportal
D/ViewRootImpl@b39019d[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
SQLiteHander.java
public class SQLiteHandler extends SQLiteOpenHelper {
private static final String TAG = SQLiteHandler.class.getSimpleName();
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "coredev_gsacwp";
// Table name
private static final String TABLE_MEMBERS = "members";
private static final String TABLE_MEMBERS_SLDTL = "sldtl";
// members Table Column name
private static final String BR_CODE = "br_code";
private static final String MEM_ID = "mem_id";
private static final String MEM_USERNAME = "username";
private static final String MEM_EMAIL = "email";
private static final String MEM_CREATED_AT = "created_at";
// sldtl Table Column name
private static final String SL_DESC = "sl_desc";
private static final String TR_DATE = "trans_date";
private static final String ACTUAL_BALANCE = "actual_balance";
private static final String AVAILABLE_BALANCE = "available_balance";
// Table Create Statements
// Members table create statement
private static final String CREATE_MEMBERS_TABLE = "CREATE TABLE " + TABLE_MEMBERS + "("
+ BR_CODE + " INTEGER,"
+ MEM_ID + " INTEGER PRIMARY KEY,"
+ MEM_USERNAME + " TEXT,"
+ MEM_EMAIL + " TEXT UNIQUE,"
+ MEM_CREATED_AT + " TEXT" + ")";
// SLDTL table create statement
private static final String CREATE_SLDTL_TABLE = "CREATE TABLE " + TABLE_MEMBERS_SLDTL + "("
+ SL_DESC + " TEXT,"
+ TR_DATE + " DATETIME,"
+ ACTUAL_BALANCE + " REAL,"
+ AVAILABLE_BALANCE + " REAL" + ")";
public SQLiteHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Creating required tables
db.execSQL(CREATE_MEMBERS_TABLE);
db.execSQL(CREATE_SLDTL_TABLE);
Log.d(TAG, "Table members and sldtl was successfully created");
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// on upgrade drop existing tables
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBERS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBERS_SLDTL);
Log.d(TAG, "Drop table members and sldtl if exists");
// Creating new tables
onCreate(db);
}
/**
* Storing user details in database
* */
public void addUser(String br_code, String mem_id, String username, String email, String created_at) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(BR_CODE, br_code); // branch code
values.put(MEM_ID, mem_id); // mem id
values.put(MEM_USERNAME, username); // username
values.put(MEM_EMAIL, email); // Email
values.put(MEM_CREATED_AT, created_at); // Created At
// Inserting Row
long id = db.insert(TABLE_MEMBERS, null, values);
db.close(); // Closing database connection
Log.d(TAG, "New member was inserted into table members: " + id);
}
/**
* Getting user data from database
* */
public HashMap<String, String> getUserDetails() {
HashMap<String, String> user = new HashMap<String, String>();
String selectQuery = "SELECT * FROM " + TABLE_MEMBERS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
user.put("br_code", cursor.getString(0));
user.put("mem_id", cursor.getString(1));
user.put("username", cursor.getString(2));
user.put("email", cursor.getString(3));
user.put("created_at", cursor.getString(4));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching member's from Sqlite members table: " + user.toString());
return user;
}
/**
* Storing user SL details in database
* */
public void addUserSLDTL(String sl_desc, String tr_date, String actual_balance, String avail_balance){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(SL_DESC, sl_desc); // sl desc
values.put(TR_DATE, tr_date); // trans date
values.put(ACTUAL_BALANCE, actual_balance); // actual balance
values.put(AVAILABLE_BALANCE, avail_balance); // availabe balance
// Inserting Row
long id = db.insert(TABLE_MEMBERS_SLDTL, null, values);
db.close(); // Closing database connection
Log.d(TAG, "Members's SL Details was inserted into sldtl table: " + id);
}
/**
* Getting user SL details data from database
* */
public HashMap<String, String> getUserSLDTL() {
HashMap<String, String> sl_summ = new HashMap<String, String>();
String selectQuery = "SELECT * FROM " + TABLE_MEMBERS_SLDTL;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
sl_summ.put("sl_desc", cursor.getString(0));
sl_summ.put("tr_date", cursor.getString(1));
sl_summ.put("actual_balance", cursor.getString(2));
sl_summ.put("avail_balance", cursor.getString(3));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching member's SL details from Sqlite sldtl table: " + sl_summ.toString());
return sl_summ;
}
/**
* Re create database Delete all tables and create them again
* */
public void deleteUsers() {
SQLiteDatabase db = this.getWritableDatabase();
// Delete All Rows
db.delete(TABLE_MEMBERS, null, null);
db.close();
Log.d(TAG, "All member's info are now deleted in sqlite");
}
/**
* Re create database Delete all tables and create them again
* */
public void deleteUserSLDTL() {
SQLiteDatabase db = this.getWritableDatabase();
// Delete All Rows
db.delete(TABLE_MEMBERS_SLDTL, null, null);
db.close();
Log.d(TAG, "All member's SLDTL info are now deleted in sqlite");
}
}
Login.java
public class LoginActivity extends Activity {
private static final String TAG = RegisterActivity.class.getSimpleName();
private Button btnLogin;
private Button btnLinkToRegister;
private EditText inputUsername;
private EditText inputPassword;
private ProgressDialog pDialog;
private SessionManager session;
private SQLiteHandler db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
inputUsername = (EditText) findViewById(R.id.username);
inputPassword = (EditText) findViewById(R.id.password);
btnLogin = (Button) findViewById(R.id.btnLogin);
btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
// Progress dialog
pDialog = new ProgressDialog(this);
pDialog.setCancelable(false);
// SQLite database handler
db = new SQLiteHandler(getApplicationContext());
// Session manager
session = new SessionManager(getApplicationContext());
// Check if user is already logged in or not
if (session.isLoggedIn()) {
// User is already logged in. Take him to main activity
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
// Login button Click Event
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String username = inputUsername.getText().toString().trim();
String password = inputPassword.getText().toString().trim();
// Check for empty data in the form
if (!username.isEmpty() && !password.isEmpty()) {
// login user
checkLogin(username, password);
} else {
// Prompt user to enter credentials
Toast.makeText(getApplicationContext(),
"Please enter the credentials!", Toast.LENGTH_LONG)
.show();
}
}
});
// Link to Register Screen
btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Uri uri = Uri.parse("http://gsac.ph/iaccswebportal/register.php");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
/**
* function to verify login details in mysql db
* */
private void checkLogin(final String username, final String password) {
// Tag used to cancel the request
String tag_string_req = "req_login";
pDialog.setMessage("Logging in ...");
showDialog();
StringRequest strReq = new StringRequest(Method.POST,
AppConfig.URL_LOGIN, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Login Response: " + response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
// Check for error node in json
if (!error) {
// user successfully logged in
// Create login session
session.setLogin(true);
// Now store the user in SQLite
//String uid = jObj.getString("uid");
JSONObject user = jObj.getJSONObject("user");
String br_code = user.getString("br_code");
String mem_id = user.getString("mem_id");
String username = user.getString("username");
String email = user.getString("email");
String created_at = user.getString("created_at");
// Inserting row in users table
db.addUser(br_code, mem_id, username, email, created_at);
try {
JSONObject json = new JSONObject (response);
if(json.has("sl_summ")){
JSONObject sl_jObj = new JSONObject(json.getString("sl_summ"));
Boolean sl_error = sl_jObj.getBoolean("error");
Log.e("Test", "Error : " + sl_error);
if (!sl_error) {
JSONArray sl_summ = sl_jObj.optJSONArray("sl_summ");
for (int i = 0; i < sl_summ.length(); i++) {
JSONObject rootObj = sl_summ.getJSONObject(i);
String sl_desc = rootObj.getString("sl_desc");
String tr_date = rootObj.getString("tr_date");
String actual_balance = rootObj.getString("actual_balance");
String avail_balance = rootObj.getString("avail_balance");
// then do whatever you want with this data
// Inserting row in users table
db.addUserSLDTL(sl_desc, tr_date, actual_balance, avail_balance);
}
}
else{
// Error in getting sl_sum. Get the error message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
}
}catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
// Launch main activity
Intent intent = new Intent(LoginActivity.this,
MainActivity.class);
startActivity(intent);
finish();
} else {
// Error in login. Get the error message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("username", username);
params.put("password", password);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
private void showDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hideDialog() {
if (pDialog.isShowing())
pDialog.dismiss();
}
}