登录

时间:2015-07-27 08:51:52

标签: android-sqlite

我一直在研究SQLite,特别是当它涉及登录和注册时。在这里,我设法发现,在注册时,数据将出现在表格中。但是如果我在没有首先注册的情况下登录,使用来自MySQL的数据进行验证,则数据将不会被传递并插入到表中。

这是一个非常奇怪的事情,因为我认为我研究过的代码,learn2crack和AndroidHive,已经解决了这个问题。或者我可能在这里遗漏了一些东西。

所以我想如果我要将用户的数据插入到LoginActivity的SQLite中,也许我需要将数据从MySQL传递给SQLite。如果用户已经存在于SQLite上,那么它不会插入新行但会更新它吗?我不确定这是否是解决这个问题的最佳方法,但我真的很感激任何建议。

否则,现在我无法检查SQLite上的现有用户。因为如果我这样做了:

public void syncUser(HashMap<String, String> queryValues) {
    HashMap<String, String> user = new HashMap<>();
    String selectUsernameQuery = "SELECT * FROM " + TABLE_LOGIN + " WHERE " + KEY_USERNAME + " = ?";

我无法弄清楚如何将“USERNAME”(来自EditText)从LoginActivity传递到我的SQLiteHelper,在那里我可以检查SQLite中的现有用户名。非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

  

如果用户已经存在于SQLite中,则不会插入   一个新的行,但更新它?

哦,我终于弄明白了。我每次登录应用程序时都会创建新的多行,因为我认为我应该让所有用户都能访问来自MySQL的数据与SQLite DB同步。在退出时我没有删除前一行。

  

但如果我在没有先注册的情况下登录,使用来自MySQL的数据进行验证,则不会传递数据并将其插入表中。

我在尝试将MySQL中的数据与SQLite同步时遇到了困难。但是由于简单的Volley POST方法,我终于成功实现了它。这是解决了我的问题的更新的工作代码:

StringRequest stringRequest = 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) {
                        // Clear all previous data in SQLite and fetches data from MySQL through JSON;
                        // Then, will pass the parameters obtain from MySQL to SQLite
                        JSONObject userObj = jObj.getJSONObject("user");
                        sqLiteHandler.logoutUser(getApplicationContext());
                        sqLiteHandler.addUser(userObj.getString("uid"),
                                userObj.getString("username"),
                                userObj.getString("first_name"),
                                userObj.getString("last_name"),
                                userObj.getString("email"),
                                userObj.getString("type_of_tradesman"),
                                userObj.getString("picture"),
                                userObj.getString("user_description"),
                                userObj.getString("phone_number"),
                                userObj.getString("phone_service"),
                                userObj.getString("location"),
                                userObj.getString("lat"),
                                userObj.getString("lng"),
                                userObj.getString("created_at"));

                        // User successfully logged in
                        // Create login session
                        session.setLogin(true);

                        // Launch main activity
                        Intent intent = new Intent(LogInActivity.this, MainActivity.class);
                        startActivity(intent);
                        String successMsg = "Welcome to XXX, " + username + "!";
                        Toast.makeText(getApplicationContext(), successMsg, Toast.LENGTH_LONG).show();
                    } 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();
                }
            }
        }, 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("tag", "login");
                params.put("username", username);
                params.put("password", password);

                return params;
            }
        };

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(stringRequest, tag_string_req);

addUser()方法:

/**
 * Storing user details in database from the app's registration page
 */
public void addUser(String uid,
                    String username,
                    String first_name,
                    String last_name,
                    String email,
                    String type_of_tradesman,
                    String picture,
                    String user_description,
                    String phone_number,
                    String phone_service,
                    String location,
                    String lat,
                    String lng,
                    String created_at) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_UID, uid);
    values.put(KEY_USERNAME, username);
    values.put(KEY_FIRST_NAME, first_name);
    values.put(KEY_LAST_NAME, last_name);
    values.put(KEY_EMAIL, email);
    values.put(KEY_TYPE_OF_TRADESMAN, type_of_tradesman);
    values.put(KEY_PICTURE, picture);
    values.put(KEY_USER_DESCRIPTION, user_description);
    values.put(KEY_PHONE_NUMBER, phone_number);
    values.put(KEY_PHONE_SERVICE, phone_service);
    values.put(KEY_LOCATION, location);
    values.put(KEY_LAT, lat);
    values.put(KEY_LNG, lng);
    values.put(KEY_CREATED_AT, created_at);

    // Inserting Row
    long id = db.insert(TABLE_LOGIN, null, values);
    db.close();

    Log.d(TAG, "New user inserted into SQLite row number " + id);
}