Android登录:当条目无效时应用程序崩溃?

时间:2014-09-22 23:26:16

标签: java android mysql json

我正在使用JSON和MYSQL创建一个登录应用程序,如果我输入了正确的用户名和密码值,但是每当我输入无效的条目时,它都会崩溃吗?

另一个奇怪的部分是每当我登录然后注销然后尝试一个无效的条目,它成功登录。这就像它保存以前的值,永远不会重置?

Logcat报告

09-22 18:52:26.838: E/AndroidRuntime(1924): FATAL EXCEPTION: main
09-22 18:52:26.838: E/AndroidRuntime(1924): Process: com.learn2crack.tab, PID: 1924
09-22 18:52:26.838: E/AndroidRuntime(1924): java.lang.NullPointerException
09-22 18:52:26.838: E/AndroidRuntime(1924):     at com.learn2crack.tab.Login$ProcessLogin.onPostExecute(Login.java:202)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at com.learn2crack.tab.Login$ProcessLogin.onPostExecute(Login.java:1)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at android.os.AsyncTask.finish(AsyncTask.java:632)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at android.os.Handler.dispatchMessage(Handler.java:102)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at android.os.Looper.loop(Looper.java:136)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at android.app.ActivityThread.main(ActivityThread.java:5017)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at java.lang.reflect.Method.invokeNative(Native Method)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at java.lang.reflect.Method.invoke(Method.java:515)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
09-22 18:52:26.838: E/AndroidRuntime(1924):     at dalvik.system.NativeStart.main(Native Method)
检查互联网连接后,

onclick事件的代码段 login.java

/**
     * Async Task to get and send data to My Sql database through JSON respone.
     **/
    private class ProcessLogin extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog pDialog;

    String username,password;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        inputusername = (EditText) findViewById(R.id.username);
        inputPassword = (EditText) findViewById(R.id.pword);
        username = inputusername.getText().toString();
        password = inputPassword.getText().toString();
        pDialog = new ProgressDialog(Login.this);
        pDialog.setTitle("Contacting Servers");
        pDialog.setMessage("Logging in ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected JSONObject doInBackground(String... args) {

        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.loginUser(username, password);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        try {
           if (json.getString(KEY_SUCCESS) != null) {

                String res = json.getString(KEY_SUCCESS);

                if(Integer.parseInt(res) == 1){
                    pDialog.setMessage("Loading User Space");
                    pDialog.setTitle("Getting Data");

                    Intent upanel = new Intent(getApplicationContext(), MainActivity.class);
                    upanel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    pDialog.dismiss();
                    startActivity(upanel);
                    /**
                     * Close Login Screen
                     **/
                    finish();
                }else{

                    pDialog.dismiss();
                    loginErrorMsg.setText("Incorrect username/password");
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
   }
}
public void NetAsync(View view){
    new NetCheck().execute();
}

}

来自userfunctions.java的登录方法

public JSONObject loginUser(String email, String password){
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", login_tag));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("password", password));
        JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
        return json;

1 个答案:

答案 0 :(得分:0)

1.在LoginActivity中定义另一个静态String变量,如:

private static String KEY_ERROR = "error";

2.修改您的onPostExecute()方法:

@Override
        protected void onPostExecute(JSONObject json) {
            try {
                if (json.getString(KEY_SUCCESS) != null) {

                    String res = json.getString(KEY_SUCCESS);
                    String red = json.getString(KEY_ERROR);

                    if (Integer.parseInt(res) == 1) {

                        pDialog.setMessage("Dashboard");
                        pDialog.setTitle("Loading.");

                        Intent upanel = new Intent(getApplicationContext(),
                                MainActivity.class);
                        upanel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        pDialog.dismiss();
                        startActivity(upanel);
                        /**
                         * Close Login Screen
                         **/
                        finish();

                    } else if (Integer.parseInt(red) == 1) {

                        pDialog.dismiss();
                        Toast.makeText(getApplicationContext(), "Wrong Email/Pw",
                         Toast.LENGTH_SHORT).show();
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

3.修改您的Web服务(假设您使用PHP):

<强>的index.php

// check for tag type
    if ($tag == 'login') {

        // Get data
        $email    = $_POST['email'];
        $password = $_POST['password'];

        // check for user
        $user = $db->getUserByEmailAndPassword($email, $password);

        if ($user != false) {

            // user found
            // echo json with success = 1
            $response["success"] = 1;
            $response["error_msg"] = "Correct credentials!";
            echo json_encode($response);

        } else {

            // user not found
            // echo json with error = 1
            $response["error"]     = 1;
            $response["error_msg"] = "Incorrect email or password!";
            echo json_encode($response);
        }
    }

<强> DB_Functions.php

    /**
    * Verifies user by email and password
    */

    public function getUserByEmailAndPassword($email, $password) {
        $result = mysql_query("SELECT * FROM users WHERE email = '$email'") or die(mysql_error());
        // check for result  
        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {
            $result = mysql_fetch_array($result);
            $salt = $result['salt'];
            $encrypted_password = $result['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);
            // check for password equality
            if ($encrypted_password == $hash) {
                //Update last login of user
                //mysql_query("UPDATE users SET last_login = NOW() WHERE email='$email'");
                // user authentication details are correct
                return $result;
            }
        } else {
            // user not found
            return false;
        }
    }
相关问题