ログインモーダル送信ボタンのクリックリスナーに問題があります。
これはエラーです。
Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.widget.Button.setOnClickListener(Android.view.View$OnClickListener)' on a null object reference
Nullポインター例外とは何かを合理的に理解しており、私と同様の問題を徹底的に検索しています。クリックリスナをいくつかの方法で再フォーマットし、正しいビューIDなどがあることを確認しました。
package...
import...
public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {
//Variables
String currentPage = "";
Stack<String> crumbs = new Stack<String>();
//Fragment managing the behaviors, interactions and presentation of the navigation drawer.
private NavigationDrawerFragment mNavigationDrawerFragment;
// Used to store the last screen title. For use in {@link #restoreActionBar()}.
public CharSequence mTitle;
//temp
AuthenticateUserTokenResult authenticateUserTokenResult;
String loginErrorMessage = "";
String loginErrorTitle = "";
Boolean logonSuccessful = false;
Dialog loginDialog;
// Login EditTexts
EditText Username;
EditText CompanyID;
EditText Password;
Button Submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle(); // Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
if(authenticateUserTokenResult == null) {
attemptLogin();
}
}
public void attemptLogin() {
loginDialog = new Dialog(this,Android.R.style.Theme_Translucent_NoTitleBar);
loginDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
loginDialog.setContentView(R.layout.login_modal);
loginDialog.setCancelable(false);
//loginDialog.setOnCancelListener(cancelListener);
loginDialog.show();
Submit = (Button)findViewById(R.id.Submit);
Submit.setOnClickListener(new View.OnClickListener() // the error is on this line (specifically the .setOnClickListener)
{
@Override
public void onClick(View v)
{
ClyxUserLogin user = new ClyxUserLogin();
Username = (EditText)findViewById(R.id.Username);
user.logon = Username.getText().toString();
CompanyID = (EditText)findViewById(R.id.CompanyID);
user.idCompany = Integer.parseInt(CompanyID.getText().toString());
Password = (EditText)findViewById(R.id.Password);
user.password = Password.getText().toString();
user.idApplication = 142;
authenticate(user);
}
});
}
明らかに、しかし、私が思うトピックに関係のないものがあります。これは、ボタンが付いているダイアログのXMLファイルです。
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#3366FF">
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:background="#FFFFFF" >
<TextView
Android:id="@+id/LoginTitle"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal"
Android:layout_marginTop="10dp"
Android:layout_marginStart="10dp"
Android:textColor="#000000"
Android:textSize="20sp"
Android:text="Login" />
<EditText
Android:id="@+id/Username"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:layout_below="@+id/LoginTitle"
Android:layout_margin="10dp"
Android:hint="Username" />
<EditText
Android:id="@+id/CompanyID"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:layout_below="@+id/Username"
Android:layout_alignStart="@+id/Username"
Android:inputType="number"
Android:hint="Company ID" />
<EditText
Android:id="@+id/Password"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:layout_below="@+id/CompanyID"
Android:layout_alignStart="@+id/Username"
Android:layout_marginTop="10dp"
Android:layout_marginBottom="10dp"
Android:inputType="textPassword"
Android:hint="Password" />
<Button
Android:id="@+id/Submit"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/Password"
Android:layout_marginBottom="10dp"
Android:layout_centerHorizontal="true"
Android:text="Login" />
</RelativeLayout>
</RelativeLayout>
どんな助けも大歓迎です。
Submit
はactivity_main.xml
の一部ではないためnull
です
findViewById
内でActivity
を呼び出すと、アクティビティのレイアウト内でView
が検索されます。
代わりにこれを試してください:
Submit = (Button)loginDialog.findViewById(R.id.Submit);
別のこと:あなたが使用する
Android:layout_below="@+id/LoginTitle"
しかし、あなたが望むのはおそらく
Android:layout_below="@id/LoginTitle"
@id
と@+id
の違いについては この質問 をご覧ください。
Android.widget.Button.setOnClickListener(Android.view.View $ OnClickListener) 'nullオブジェクト参照
Submit
ボタンはlogin_modal
内にあるため、ボタンにアクセスするにはloginDialog
ビューを使用する必要があります。
Submit = (Button)loginDialog.findViewById(R.id.Submit);
私もコードを置き忘れたときに同様のエラーが発生しました
text=(TextView)findViewById(R.id.text);// this line has to be below setcontentview
setContentView(R.layout.activity_my_otype);
//this is the correct place
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
以下に示すように、正しい順序でコードを配置する作業をしました
setContentView(R.layout.activity_my_otype);
text=(TextView)findViewById(R.id.text);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
Main.xmlのButtonに次のようなわかりやすい名前を付けてみてください。
<Button
Android:id="@+id/buttonXYZ"
(少なくとも、最初の文字はXMLファイルで小文字を使用してください)
そして、MainActivityクラスで次のように宣言します:
Button buttonXYZ;
OnCreate(Bundle savedInstanceState)メソッドで、次のように定義します:
buttonXYZ = (Button) findViewById(R.id.buttonXYZ);
また、Buttons/TextViewsを外側に移動し、.setOnClickListenerの前に配置します。コードがきれいになります。
Username = (EditText)findViewById(R.id.Username);
CompanyID = (EditText)findViewById(R.id.CompanyID);