вызов метода в отдельном классе

#android #multithreading

#Android #многопоточность

Вопрос:

У меня есть настройка основного класса и рабочий поток, один из моих ранних запросов, которые я делаю 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 , но все еще сталкиваюсь с той же проблемой. Как я могу это исправить?

Комментарии:

1. почему бы вам не сделать действие входа в систему основным действием?

Ответ №1:

У вас есть несколько вариантов:

1) Переместите свой public void myLogin() {..} в свою основную деятельность. Я рекомендую это решение, поскольку вам не нужно другое действие для ваших целей.

2) Вызовите startActivity в своем классе login перед вызовом myLogin(). Поскольку вы наследуете от Activity, необходимо вызвать onCreate, прежде чем вызывать что-либо еще. Вот почему вы получаете исключение. startActivity вызывается следующим образом:

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

Ответ №2:

Вы не можете сделать это таким образом просто потому, что используете контекст

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

Контекст недоступен до тех пор, пока Activity onCreate не будет вызван через startActivity . и не создавая новый экземпляр объекта login, вы можете попробовать передать контекст из действия, вызывающего этот метод

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

да и никогда не создавайте экземпляр activity через конструктор .. -.-