Возникли проблемы при создании страницы входа в Android с помощью Intents & Activity - PullRequest
0 голосов
/ 24 апреля 2011

Я пытаюсь создать общий экран входа для Android. Я бы хотел, чтобы программа проверила, указаны ли имя пользователя и пароль (в настоящее время жестко заданы). Если учетная запись указана в списке, вы попадете на новый экран с именем menuTest. У меня основной логин работает (без активности или намерений). Но когда я пытаюсь добавить намерения, я получаю ошибку. Как я могу это исправить? Ниже приведен мой пример кода.

Ниже приведены несколько ссылок, содержащих скриншоты сбоев и logcat ( edit : ссылки не работают).

http://i.stack.imgur.com/ve7OL.png

http://i.stack.imgur.com/KLeQa.png

Спасибо.


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Login extends Activity {
    // Declare our Views, so we can access them later
    private EditText etUsername;
    private EditText etPassword;
    private Button btnLogin;
    private Button btnCancel;
    private TextView lblResult;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set Activity Layout
    setContentView(R.layout.login);

    // Get the EditText and Button References
    etUsername = (EditText)findViewById(R.id.username);
    etPassword = (EditText)findViewById(R.id.password);
    btnLogin = (Button)findViewById(R.id.login_enter);
    btnCancel = (Button)findViewById(R.id.login_cancel);
    lblResult = (TextView)findViewById(R.id.result);

    // Set Click Listener
    btnLogin.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // Check Login
            String username = etUsername.getText().toString();
            String password = etPassword.getText().toString();

            if(username.equalsIgnoreCase("USER") && password.equals("132465")){
                //lblResult.setText("Login successful");
                Intent loginIntent = new Intent(this, menuTest.class);
                startActivity(loginIntent);
            }

            else {
                lblResult.setText("Login Failed");
            }
        }
    });


    btnCancel.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // Close the application
            finish();
        }
    });
}
}

Ответы [ 4 ]

2 голосов
/ 24 апреля 2011

попробуйте изменить Intent loginIntent = new Intent(this, menuTest.class); на Intent loginIntent = new Intent(Login.this, menuTest.class);

0 голосов
/ 17 мая 2011

j1478 Вы спросили: «Извините, что беспокою, но не могли бы вы объяснить, в чем разница между Login.this и этим? - jl478 24 апреля в 20:03»

Ответ был дан в комментариях к вашему вопросу.

«Поскольку он говорит« this »внутри своей кнопки onClickListener,« this »относится к onClickListener, а не к действию - Томас Оуэрс, 24 апреля, 21:11»

onClickListener - это внутренний класс, так что это относится к экземпляру этого внутреннего класса. Чтобы получить экземпляр Login, вам нужно сказать Login.this, к которому у вас тоже так получилось, потому что внутренние классы наследуют переменные области видимости их содержащих классов.

0 голосов
/ 25 апреля 2011

Я использовал функцию setContetView основной деятельности таким образом, что вам не нужно беспокоиться о намерениях

0 голосов
/ 24 апреля 2011

это может быть вызвано двумя причинами

1) действие назначения (menuTest) не может быть определено в манифесте xml.

2) вам может потребоваться запустить внутри потока пользовательского интерфейса, например

    Login.this.runOnUiThread(new Runnable() 
    public void run() {
        //lblResult.setText("Login successful");
        Intent loginIntent = new Intent(this, menuTest.class);
        startActivity(loginIntent);
        }
    });
...