簡體   English   中英

Android Edittext:嘗試在空對象引用上調用接口方法

[英]Android Edittext: Attempt to invoke interface method on a null object reference

當我運行下面的代碼時,永遠不會在edittext中找到用戶名。 我已經測試了是否使用用戶名,但是單擊該按鈕時,它將向事件偵聽器發送一個空對象。 我是android新手,感到困惑,為什么當用戶名edittext包含用戶名時它不返回字符串。

public class LoginFragment extends Fragment {

public static final String TAG = LoginFragment.class.getSimpleName();
public  EditText username = null;
public View root = null;

public interface eventListener {
    void someEvent(String s);
}

eventListener eventListener;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    root = inflater.inflate(R.layout.login_splashpage, null, false);
    username = (EditText) root.findViewById(R.id.login_username);
    Button login_button = (Button) root.findViewById(R.id.login_button);
    login_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String usernameString = username.getText().toString();
            Log.d(TAG, "Button Clicked" + usernameString);
            if (!usernameString.isEmpty()) {
                eventListener.someEvent(usernameString);
            } else {
                Snackbar.make(root, "No username provided. Try again", Snackbar.LENGTH_SHORT).show();
            }
        }
    });

    return root;
}

}

無論如何,謝謝您的幫助和時間

eventListener為null,這就是為什么您得到NullPointerException的原因。

由於原始接口僅提供有關派生類應執行的操作的約定,因此您還必須創建其背后的邏輯:

private interface eventListener {
  void onEvent(String string);
}

eventListener listener = new eventListener() {
  @Override
  public void onEvent(String string) {
    Log.e(TAG, "onEvent " + string);
  }
};

我不確定您是否想要在這里使用簡單的方法作為接口:

public void onLogin(String username) {
  Log.e(TAG, "onLogin " + username)
}

我認為問題出在這條線上

eventListener.someEvent(usernameString);

在未初始化Interface eventListener的地方,您可以這樣做嗎?

eventListener ev = new eventListener(){
void someEvent(usernameString);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM