2014-10-11 77 views
0

我正在嘗試使登錄頁面和使用服務類別的android在後臺運行。但是我看不到在代碼末尾創建的菜單。當我在模擬器中運行它時,該應用完全正常運行。但是在調試模式下,它給出了一個和錯誤,這意味着應用程序沒有響應。我的應用程序,我認爲崩潰,因爲在完成oncreate方法之前,服務響應時間非常高。我該如何解決這個問題?這是我的代碼。無法執行服務的原因

private ServiceConnection mConnection = new ServiceConnection() { 
     public void onServiceConnected(ComponentName className, IBinder service) { 

      imService = ((IMService.IMBinder)service).getService(); 

      if (imService.isUserAuthenticated() == true) 
      { 
       Intent i = new Intent(Login.this, FriendList.class);                 
       startActivity(i); 
       Login.this.finish(); 
      } 
     } 

     public void onServiceDisconnected(ComponentName className) { 

      imService = null; 
      Toast.makeText(Login.this, R.string.local_service_stopped, 
        Toast.LENGTH_SHORT).show(); 
     } 
    }; 




    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  

     startService(new Intent(Login.this, IMService.class));   


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

     Button loginButton = (Button) findViewById(R.id.login); 
     cancelButton = (Button) findViewById(R.id.cancel_login); 
     usernameText = (EditText) findViewById(R.id.userName); 
     passwordText = (EditText) findViewById(R.id.password);   

     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)) 
          { 

           handler.post(new Runnable(){ 
            public void run() { 
             Toast.makeText(getApplicationContext(),R.string.make_sure_username_and_password_correct, Toast.LENGTH_LONG).show(); 

            }         
           }); 

          } 
          else { 


           handler.post(new Runnable(){ 
            public void run() {          
             Intent i = new Intent(Login.this, FriendList.class);             
             //i.putExtra(FRIEND_LIST, result);      
             startActivity(i); 
             Login.this.finish(); 
            }         
           }); 

          } 

         } 
        }; 
        loginThread.start(); 

       } 

      }   
     }); 

     cancelButton.setOnClickListener(new OnClickListener(){ 

      public void onClick(View arg0) 
      {     
       imService.exit(); 
       finish(); 

      } 

     }); 


    } 

    @Override 
    protected Dialog onCreateDialog(int id) 
    {  
     int message = -1;  
     switch (id) 
     { 
      case NOT_CONNECTED_TO_SERVICE: 
       message = R.string.not_connected_to_service;    
       break; 
      case FILL_BOTH_USERNAME_AND_PASSWORD: 
       message = R.string.fill_both_username_and_password; 
       break; 
      case MAKE_SURE_USERNAME_AND_PASSWORD_CORRECT: 
       message = R.string.make_sure_username_and_password_correct; 
       break; 
      case NOT_CONNECTED_TO_NETWORK: 
       message = R.string.not_connected_to_network; 
       break; 
      default: 
       break; 
     } 

     if (message == -1) 
     { 
      return null; 
     } 
     else 
     { 
      return new AlertDialog.Builder(Login.this)  
      .setMessage(message) 
      .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

       } 
      })   
      .create(); 
     } 
    } 

    @Override 
    protected void onPause() 
    { 
     unbindService(mConnection); 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() 
    {  
     bindService(new Intent(Login.this, IMService.class), mConnection , Context.BIND_AUTO_CREATE); 

     super.onResume(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) {  
     boolean result = super.onCreateOptionsMenu(menu); 

     menu.add(0, SIGN_UP_ID, 0, R.string.sign_up); 
     menu.add(0, EXIT_APP_ID, 0, R.string.exit_application); 


     return result; 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 

     switch(item.getItemId()) 
     { 
      case SIGN_UP_ID: 
       Intent i = new Intent(Login.this, SignUp.class); 
       startActivity(i); 
       return true; 
      case EXIT_APP_ID: 
       cancelButton.performClick(); 
       return true; 
     } 

     return super.onMenuItemSelected(featureId, item); 
    } 

} 

當我調試logcat的是這樣的

10-11 16:06:39.196: E/ActivityManager(58): ANR in at.vcity.androidim 
10-11 16:06:39.196: E/ActivityManager(58): Reason: Executing service at.vcity.androidim/.services.IMService 
10-11 16:06:39.196: E/ActivityManager(58): Load: 0.27/0.16/0.11 
10-11 16:06:39.196: E/ActivityManager(58): CPU usage from 39193ms to 16ms ago: 
10-11 16:06:39.196: E/ActivityManager(58): adbd: 2% = 0% user + 2% kernel 
10-11 16:06:39.196: E/ActivityManager(58): vcity.androidim: 1% = 1% user + 0% kernel/faults: 3237 minor 1 major 
10-11 16:06:39.196: E/ActivityManager(58): system_server: 0% = 0% user + 0% kernel/faults: 66 minor 
10-11 16:06:39.196: E/ActivityManager(58): logcat: 0% = 0% user + 0% kernel 
10-11 16:06:39.196: E/ActivityManager(58): m.android.phone: 0% = 0% user + 0% kernel/faults: 40 minor 
10-11 16:06:39.196: E/ActivityManager(58): m.android.email: 0% = 0% user + 0% kernel/faults: 33 minor 
10-11 16:06:39.196: E/ActivityManager(58): ndroid.settings: 0% = 0% user + 0% kernel/faults: 51 minor 
10-11 16:06:39.196: E/ActivityManager(58): zygote: 0% = 0% user + 0% kernel/faults: 24 minor 
10-11 16:06:39.196: E/ActivityManager(58): d.process.acore: 0% = 0% user + 0% kernel/faults: 31 minor 
10-11 16:06:39.196: E/ActivityManager(58): .quicksearchbox: 0% = 0% user + 0% kernel/faults: 29 minor 
10-11 16:06:39.196: E/ActivityManager(58): com.android.mms: 0% = 0% user + 0% kernel/faults: 26 minor 
10-11 16:06:39.196: E/ActivityManager(58): TOTAL: 4% = 1% user + 2% kernel + 0% irq + 0% softirq 
+0

;' – 2014-10-11 12:39:08

+0

嘗試過,但仍然沒有運氣 – mert 2014-10-11 12:43:04

+0

刪除super.onCreateOptionsMenu(菜單),只是返回true與你的menu.add(.....); – 2014-10-11 12:54:33

回答

0

嘗試:

@Override 
public boolean onCreateOptionsMenu(Menu menu) {  
    getMenuInflater().inflate(R.menu.menu, menu); 

    menu.add(0, SIGN_UP_ID, 0, R.string.sign_up); 
    menu.add(0, EXIT_APP_ID, 0, R.string.exit_application); 
    return true; 
} 
在`onCreateOptionsMenu`返回TRUE;而不是'返回結果
+0

對不起,沒有運氣我不認爲這個問題是在oncreateoptionsmenu這是它沒有達到該行 – mert 2014-10-11 12:55:23

相關問題