如何让app等待服务连接和身份验证

时间:2014-12-10 00:37:31

标签: android service connection

我需要我的应用程序在加载屏幕上等待,以便可以建立与服务器的连接,然后使用SaveSharedPreference自动输入用户保存的凭据,然后转到MainActivity中的下一页。

通过onCreate块中的调用服务进行连接:

startService(new Intent(LoggingIn.this, MessagingService.class));

并且用户凭据来自SaveSharedPreference并在try / catch块中发送到服务器:

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

目前,应用程序只是启动然后崩溃。我尝试使用Thread.sleep(500),但只是关闭应用程序,并发布此错误:

enter image description here

  1. 如何在发送authenticateUser

  2. 之前获取上述功能并让我的应用等待与服务器的连接
  3. 在我的应用尝试启动authenticateUser之前,等待使用MainActivity成功登录?

        setContentView(R.layout.loading_splash_page);
    
        // 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();
    
  4. ADDITION imService的服务方式:

    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();
            }
        };
    

0 个答案:

没有答案