用户使用SaveSharedPreference自动登录 - InvocationTarget和NullPointer Exceptions

时间:2014-12-09 03:04:22

标签: android nullpointerexception invocationtargetexception

我正在使用Androids SaveSharedPreference允许用户在他们之前登录后自动登录。要使用户获得访问权限,必须使用webscokets将其登录信息发送到我的服务器,并且一旦建立连接,他们就可以访问其帐户。

就目前的功能而言,用户可以在第一时间登录应用并使用所有功能。问题出现时,用户关闭,而不是注销,并尝试再次访问,并抛出下面的错误,应用程序崩溃:

enter image description here

然后

enter image description here

我已经看到LoggingIn第207行的NullPoint错误位于:

result = imService.authenticateUser(
                                SaveSharedPreference
                                        .getUserName(getApplicationContext()),
                                SaveSharedPreference
                                        .getPassword(getApplicationContext()));

一旦app启动,LoggingIn类的onCreate方法中的类的剩余代码就会启动:

protected static final int NOT_CONNECTED_TO_SERVICE = 0;
    protected static final int FILL_BOTH_USERNAME_AND_PASSWORD = 1;
    public static final String AUTHENTICATION_FAILED = "0";
    public static final String FRIEND_LIST = "FRIEND_LIST";
    protected static final int MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT = 2;
    protected static final int NOT_CONNECTED_TO_NETWORK = 3;
    private EditText usernameText;
    private EditText passwordText;

    private Manager imService;
    public static final int SIGN_UP_ID = Menu.FIRST;
    public static final int EXIT_APP_ID = Menu.FIRST + 1;

    private ServiceConnection mConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
            // This is called when the connection with the service has been
            // established, giving us the service object we can use to
            // interact with the service. Because we have bound to a explicit
            // service that we know is running in our own process, we can
            // cast its IBinder to a concrete class and directly access it.
            imService = ((MessagingService.IMBinder) service).getService();

            if (imService.isUserAuthenticated() == true) {
                // Intent i = new Intent(LoggingIn.this, ListOfFriends.class);
                Intent i = new Intent(LoggingIn.this, MainActivity.class);
                startActivity(i);
                LoggingIn.this.finish();
            }
        }

        public void onServiceDisconnected(ComponentName className) {
            // This is called when the connection with the service has been
            // unexpectedly disconnected -- that is, its process crashed.
            // Because it is running in our same process, we should never
            // see this happen.
            imService = null;
            Toast.makeText(LoggingIn.this, R.string.local_service_stopped,
                    Toast.LENGTH_SHORT).show();
        }
    };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /*
         * Start and bind the imService
         */
        startService(new Intent(LoggingIn.this, MessagingService.class));

        setContentView(R.layout.loggin_in);
        setTitle("Login");

        ImageButton loginButton = (ImageButton) findViewById(R.id.button1);

        usernameText = (EditText) findViewById(R.id.username);
        passwordText = (EditText) findViewById(R.id.password);

        // If not logged in already
        if (SaveSharedPreference.getUserName(getApplicationContext()).length() == 0) {

            loginButton.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    if (imService == null) {
                        Toast.makeText(getApplicationContext(),
                                R.string.not_connected_to_service,
                                Toast.LENGTH_LONG).show();
                        // showDialog(NOT_CONNECTED_TO_SERVICE);
                        return;
                    } else if (imService.isNetworkConnected() == false) {
                        Toast.makeText(getApplicationContext(),
                                R.string.not_connected_to_network,
                                Toast.LENGTH_LONG).show();
                        // showDialog(NOT_CONNECTED_TO_NETWORK);

                    } else if (usernameText.length() > 0
                            && passwordText.length() > 0) {

                        Thread loginThread = new Thread() {
                            private Handler handler = new Handler();

                            @Override
                            public void run() {
                                String result = null;

                                try {
                                    result = imService.authenticateUser(
                                            usernameText.getText().toString(),
                                            passwordText.getText().toString());
                                } catch (UnsupportedEncodingException e) {

                                    e.printStackTrace();
                                }
                                if (result == null
                                        || result.equals(AUTHENTICATION_FAILED)) {
                                    /*
                                     * Authenticatin failed, inform the user
                                     */
                                    handler.post(new Runnable() {
                                        public void run() {
                                            Toast.makeText(
                                                    getApplicationContext(),
                                                    R.string.make_sure_username_and_password_correct,
                                                    Toast.LENGTH_LONG).show();

                                            // showDialog(MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT);
                                        }
                                    });

                                } else {

                                    /*
                                     * if result not equal to authentication
                                     * failed, result is equal to friend and
                                     * group list of the user 0: is for friends,
                                     * 1: is for groups
                                     */
                                    handler.post(new Runnable() {
                                        public void run() {

                                            // If log in successful, then save
                                            // username and password to shared
                                            // preferences:

                                            SaveSharedPreference.setUserName(
                                                    getApplicationContext(),
                                                    usernameText.getText()
                                                            .toString());

                                            SaveSharedPreference.setPassword(
                                                    getApplicationContext(),
                                                    passwordText.getText()
                                                            .toString());

                                            Intent i = new Intent(
                                                    LoggingIn.this,
                                                    MainActivity.class);
                                            startActivity(i);
                                            LoggingIn.this.finish();

                                        }
                                    });

                                }

                            }
                        };
                        loginThread.start();

                    } else {
                        /*
                         * Username or Password is not filled, alert the user
                         */
                        Toast.makeText(getApplicationContext(),
                                R.string.fill_both_username_and_password,
                                Toast.LENGTH_LONG).show();
                        // showDialog(FILL_BOTH_USERNAME_AND_PASSWORD);
                    }
                }
            });

        } else {

            // If already logged in, pull the information and send to server to
            // auto log in

            Thread loginThread = new Thread() {
                private Handler handler = new Handler();

                @Override
                public void run() {
                    String result = null;

                    try {
                        result = imService.authenticateUser(
                                SaveSharedPreference
                                        .getUserName(getApplicationContext()),
                                SaveSharedPreference
                                        .getPassword(getApplicationContext()));
                    } catch (UnsupportedEncodingException e) {

                        e.printStackTrace();
                    }

                    if (result == null || result.equals(AUTHENTICATION_FAILED)) {
                        /*
                         * Authenticatin failed, inform the user
                         */
                        handler.post(new Runnable() {
                            public void run() {
                                Toast.makeText(
                                        getApplicationContext(),
                                        R.string.make_sure_username_and_password_correct,
                                        Toast.LENGTH_LONG).show();

                                // showDialog(MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT);
                            }
                        });

                    } else {

                        /*
                         * if result not equal to authentication failed, result
                         * is equal to friend and group list of the user 0: is
                         * for friends, 1: is for groups
                         */
                        handler.post(new Runnable() {
                            public void run() {
                                Intent i = new Intent(LoggingIn.this,
                                        MainActivity.class);
                                startActivity(i);
                                LoggingIn.this.finish();

                            }
                        });

                    }

                }
            };
            loginThread.start();

        }

    }

如何让用户成功自动登录我的服务?

0 个答案:

没有答案