2011-10-01 99 views
1

我有我的主類設置和一個工作線程,我在run()中提出的一個早期請求是調用我的第二個類,名爲login。我這樣做,像這樣:在單獨的類中調用方法

login cLogin = new login(); 
    cLogin.myLogin(); 

類登錄看起來是這樣的:

package timer.test; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.widget.Toast; 

public class login extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // setContentView(R.layout.main); 
    } 

    public void myLogin() { 
     // prepare the alert box 
     AlertDialog.Builder alertbox = new AlertDialog.Builder(this); 

     // set the message to display 
     alertbox.setMessage(this.getString(R.string.intro)); 

     // add a neutral button to the alert box and assign a click listener 
     alertbox.setNeutralButton("Register New Account", 
       new DialogInterface.OnClickListener() { 

        // click listener on the alert box 
        public void onClick(DialogInterface arg0, int arg1) { 
         // the button was clicked 
        } 
       }); 

     // add a neutral button to the alert box and assign a click listener 
     alertbox.setNegativeButton("Login", 
       new DialogInterface.OnClickListener() { 

        // click listener on the alert box 
        public void onClick(DialogInterface arg0, int arg1) { 
         // the button was clicked 
        } 
       }); 

     // show it 
     alertbox.show(); 

    } 
10-01 14:33:33.028: ERROR/AndroidRuntime(440): 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{timer.test/timer.test.menu}: 
    java.lang.IllegalStateException: 
    System services not available to Activities before onCreate() 

我把onCreate的,但仍然有同樣的問題。我怎樣才能解決這個問題?

+0

爲什麼不讓登錄活動成爲主要活動? – Ronnie

回答

1

你有兩個選擇:

1)將您的公共無效myLogin(){..}到您的主要活動。我推薦這個解決方案,因爲你不需要另外的活動來達到你的目的。

2)在調用myLogin()之前,在您的登錄類上調用startActivity。由於您在Activity調用其他任何東西之前需要調用Activity onCreate,因此您需要調用它。這就是爲什麼你會得到例外。 startActivity被稱爲像這樣:

Intent i = new Intent(this, login.class); 
    startActivity(i); 
1

你不能做這種方式簡單,因爲你正在使用的情況下

AlertDialog.Builder alertbox = new AlertDialog.Builder(this); //this is the activity context passed in.. 

的情況下,直到活動的onCreate通過startActivity稱爲不可用。而不是通過構建登錄對象的一個​​新實例,你可以嘗試在上下文中通過從活動調用此方法

public void myLogin(Context context) { 
    // prepare the alert box 
    AlertDialog.Builder alertbox = new AlertDialog.Builder(context); 
    //blah blah blah... 
} 

是,從來沒有通過構造函數構造活動實例.. -.-

相關問題