返回主要活动时,Android SQLite数据库无法正常工作 [英] Android SQLite Database not working when returning to main activity
问题描述
我正在开发一个要求用户使用电话号码登录的应用程序,一旦他们登录,我就将该电话号码从 LoginActivity
传递给 MainActivity
IntentPutExtra
evrything工作正常,数字显示在Main活动的布局顶部.但是,当用户开始为我的一项服务(应用程序中提供)订购时,又回到主活动,用户用于登录的电话号码就消失了.
I'm working on app that request user to use phone number to login and once they logged in, I'm passing that phone number from LoginActivity
to MainActivity
via IntentPutExtra
evrything is working fine number is showing on top of the layout in Main activity. But when user starts making order for one of my service (provided in the app) and when it comes back to main Activity the phone number that users use to login is gone.
我也尝试将该电话号码保存在 SharedPreferences
和 Database
中,但是当用户返回主要活动"时,同样的情况也会发生,存储的电话号码也不会显示 SharedPreferences
或 Database
.
I tried to save that phone number in SharedPreferences
and Database
too but the same thing happens when user comes back to Main Activity the stored phone number is not displaying neither by SharedPreferences
nor by Database
.
这是我的 MainActivity
代码:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
SessionManager manager;
TextView tvHinum;
private Button btBikeServiceBook, btCarServiceBook;
public SharedPreferences user_details;
public static final String USER_DETAILS = "User_Details";
private static final String TAG = "MainActivity";
private static String USERNAME= "";
public String passUserName , UserMob ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
USERNAME = intent.getStringExtra(LoginActivity.USER_NAME);
passUserName = intent.getStringExtra(LoginActivity.USER_NAME);
// Session Manager use to check first login
manager = new SessionManager();
/*
USERNAME = passUserName;
user_details = getSharedPreferences(USER_DETAILS, MODE_WORLD_READABLE);
// Writing data to SharedPreferences
SharedPreferences.Editor editor = user_details.edit();
editor.putString("key",USERNAME);
editor.apply();
// Reading from SharedPreferences
String value = user_details.getString("key","");
Log.d(TAG, value);
*/
Log.d("Insert: ", "Inserting ..");
DatabaseHandler db = new DatabaseHandler(this);
db.addContact(new Contact(passUserName, ""));
Log.d("Reading: ", "Reading all contacts..");
List<Contact> contacts = db.getAllContacts();
for (Contact cn : contacts) {
UserMob = cn.getName();
}
btBikeServiceBook = (Button)findViewById(R.id.btBookBike);
btBikeServiceBook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, BikeMakeModelActivity.class);
startActivity(intent);
}
});
btCarServiceBook = (Button)findViewById(R.id.btBookCar);
btCarServiceBook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intntnt = new Intent(MainActivity.this, CarMakeModelActivity.class);
startActivity(intntnt);
}
});
tvHinum = (TextView) findViewById(R.id.tvHiUserNumber);
tvHinum.setText(UserMob);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
this.finish();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_logout) {
manager.setPreferences(MainActivity.this, "status", "0");
Intent intent= new Intent(MainActivity.this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
这是我的 Database Handler
类:-
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "contactsManager";
// Contacts table name
private static final String TABLE_CONTACTS = "contacts";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
// Create tables again
onCreate(db);
}
/**
* All CRUD(Create, Read, Update, Delete) Operations
*/
// Adding new contact
void addContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName()); // Contact Name
values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone
// Inserting Row
db.insert(TABLE_CONTACTS, null, values);
db.close(); // Closing database connection
}
// Getting single contact
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
// return contact
return contact;
}
// Getting All Contacts
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}
// return contact list
return contactList;
}
// Updating single contact
public int updateContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName());
values.put(KEY_PH_NO, contact.getPhoneNumber());
// updating row
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
}
// Deleting single contact
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
db.close();
}
// Getting contacts Count
public int getContactsCount() {
String countQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
}
当我从最终活动
返回到 MainActivity
时,我正在使用
When I'm returning from Final activity
to MainActivity
I'm using
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
清除堆栈.我以为这是清除堆栈的问题,但是在正常返回而不清除堆栈之后,发生了同样的事情,并且没有显示电话号码.
to clear stack. I thought this is the problem with Clearing Stack but after returning normally without clearing Stack same thing happens and no phone number displayed.
推荐答案
感谢您的支持.现在我的应用程序运行正常,因为@Secret Coder说我正在 onRestart()
和 onPause()
中使用我的方法,现在我收到输入的电话号码用户
Thanks for your support guys. Now my app is working fine as @Secret Coder said i'm using my methods in onRestart()
and onPause()
and now I'm receiving the Phone Number Entered my user
这篇关于返回主要活动时,Android SQLite数据库无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!