2017-01-25 23 views
-2

我正在嘗試爲安全目的輸入用戶名和密碼以進入我的應用程序。我試圖設置用戶名和密碼作爲對象,但它給了我上述錯誤。EditText中的EditText(android.content.Context)無法應用於(android.view.View)

任何線索?

我使用過Android Studio

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);表示我們正在從XML獲取EditText對象標籤的參考。

+0

謝謝!我這樣做了,它不再給我一個錯誤,但它現在不起作用。當我輸入使用並通過列出,並點擊輸入按鈕,沒有任何反應 –

+0

沒關係!有用!謝謝。你能否向我解釋究竟將新的EditText改爲(EditText)的確切原因? –

+0

@backwardforward嘗試更新部分,我很高興我可以幫助,愉快的編碼 –

1

您使用的新關鍵字創建了一個類型爲EditText的新對象。 當你寫代碼:

findViewById(R.id.passEditText) 

它返回從您的XML中的EditText視圖的ID。由於它返回一個id,並且實際上需要在代碼中使用EditText變量,所以必須將其轉換爲EditText類型。所以我們就在findViewById命令前加(EditText上)投它,就像這樣:

(EditText) findViewById(R.id.passEditText) 

接下來,您設置,爲您的變量在Java代碼中調用密碼通過給出這樣的類型和變量名:

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

希望有幫助。