返回主要活动时,Android SQLite数据库无法正常工作 [英] Android SQLite Database not working when returning to main activity

查看:38
本文介绍了返回主要活动时,Android SQLite数据库无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个要求用户使用电话号码登录的应用程序,一旦他们登录,我就将该电话号码从 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆