2011-10-01 63 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... 
} 

是,从来没有通过构造函数构造活动实例.. -.-

相关问题