2017-01-25 4 views
-2

Я пытаюсь ввести имя пользователя и пароль в целях безопасности, чтобы войти в мое приложение. Я пробовал устанавливать имя пользователя и пароль как объекты, но он дает мне вышеуказанную ошибку.EditText (android.content.Context) в EditText не может быть применен к (android.view.View)

Любые подсказки?

Я использую андроид студии

package com.example.xfrehner1.jacksonattendance; 

import android.content.Intent; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
public class LogIn extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_log_in); 
    } 
    /*Creates objects for the username and password*/ 
    EditText username = new EditText(findViewById(R.id.userEditText));//it highlights this red 
    EditText password = new EditText(findViewById(R.id.passEditText));//this too 

    //AlertDialog wrongUP = new AlertDialog.Builder(LogIn.this).create(); 
    //wrongUP.setTitle("Error"); 

    public void enterUPButton(View v){ 
     Intent afterLog= new Intent(this, firstScreen.class); 
     if(username.getText().toString().equals("admin") && password.getText().toString().equals("Password1234")){ 
      startActivity(afterLog); 
     }else{ 
      System.exit(0); 
     } 

    } 
} 
+0

Инициализировать вас 'views' внутри oncreate, удерживая глобальную ссылку в классе –

+1

' EditText password = new EditText (findViewById (R.id.passEditText)) ', как вы пришли к этому? Где вы это нашли? – njzk2

ответ

2

1.) создать ссылки внутри класса, чтобы использовать его позже в enterUPButton функции

public class LogIn extends AppCompatActivity { 

    EditText username,password ; 

2.) Присвоить вид внутри onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_log_in); 
    username = (EditText)findViewById(R.id.userEditText); 
    password = (EditText)findViewById(R.id.passEditText); 
} 

Обновление:

new EditText означать создание нового объекта EditText класса, но findViewById(R.id.userEditText) возвращает View объект таким образом, заявление будет new EditText(View) но вопрос нет конструктора в EditText класса, которые используют View в качестве параметра так два вопроса здесь,

  • findViewById следует использовать внутри oncreate
  • Там нет конструктора в EditText класса, который принимает View объект в качестве параметра

password = (EditText)findViewById(R.id.passEditText); среднее мы получаем ссылку EditText тег объекта от XML.

+0

Спасибо! Я сделал это, и он больше не дает мне ошибку, но теперь это не работает. Когда я ввожу использование и передаю перечисленные, и нажмите кнопку ввода, ничего не произойдет –

+0

неважно! оно работает! Спасибо. Можете ли вы объяснить мне, что именно делает изменение нового EditText (EditText)? –

+0

@backwardforward попробуйте раздел обновления, и я рад, что могу помочь, счастливое кодирование –

1

Новое ключевое слово, которое вы использовали, создает новый объект типа EditText. Когда вы пишете код:

findViewById(R.id.passEditText) 

Он возвращает идентификатор точки зрения EditText из вашего XML. Поскольку он возвращает идентификатор, и вы действительно хотите переменную EditText в своем коде, вы должны передать его в тип EditText. Таким образом, мы добавляем (EditText) непосредственно перед командой findViewById, чтобы бросить его, как так:

(EditText) findViewById(R.id.passEditText) 

Далее вы установили, что к переменной называется пароль в коде Java, давая тип и имя переменной, как это:

EditText password = (EditText) findViewById(R.id.passEditText); 

Надеюсь, что это поможет.

Смежные вопросы