I'm new to android programming, now my application ceashes. The MainAcitivity is used to login, when the "login" button was clicked, it should hava been changed to another activity, but it crashed. Here's my MainAcitivity code:
package com.example.mt;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText accountEdit;
private EditText passwordEdit;
private Button login_button;
private CheckBox rememberPass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences settings = getPreferences(MODE_PRIVATE);
accountEdit = findViewById(R.id.account);
passwordEdit = findViewById(R.id.password);
rememberPass = findViewById(R.id.remember_pass);
login = findViewById(R.id.login);
boolean isRemember = settings.getBoolean("remember_pass",false);
if(isRemember){
String account = settings.getString("account","");
String password = settings.getString("password","");
accountEdit.setText(account);
passwordEdit.setText(password);
rememberPass.setChecked(true);
}
login_button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
String account = accountEdit.getText().toString();
String password = passwordEdit.getText().toString();
if (account.equals("tianmiao")&&password.equals("tianmiao")){
SharedPreferences.Editor editor = settings.edit();
if(rememberPass.isChecked()){
editor.putBoolean("remember_password",true);
editor.putString("account",account);
editor.putString("password",password);
} else{
editor.clear();
}
editor.apply();
Intent intent = new Intent(MainActivity.this,SearchActivity.class);
startActivity(intent);
finish();
}else{
Toast.makeText(MainActivity.this,"wrong account or password(both tianmiao)",Toast.LENGTH_SHORT).show();
}
}
});
}
}
Here's SearchAcitivity code:
package com.example.mt;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SearchActivity extends AppCompatActivity {
private EditText searchEditText;
private Button search_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
searchEditText = findViewById(R.id.search);
search_button = findViewById(R.id.search_button);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
search_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String search = searchEditText.getText().toString();
if(search.equals("balabala")){
Intent intent = new Intent(SearchActivity.this,ListActivity.class);
startActivity(intent);
finish();
}else{
Toast.makeText(SearchActivity.this,"No"+search+"(there's only balabala)",Toast.LENGTH_SHORT).show();
}
}
});
}
}
MainAcitivity xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="account:"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:id="@+id/account"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="password:"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:id="@+id/password"
android:inputType="textPassword"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/remember_pass"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="remember"/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="60dp"
android:id="@+id/login_button"
android:text="login"/>
</LinearLayout>
SearchActivity xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="18sp"
android:text="buy what?:"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:id="@+id/search"/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="60dp"
android:id="@+id/search_button"
android:text="search"/>
</LinearLayout>
Here's Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mt">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SearchActivity"></activity>
<activity android:name=".ListActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
red part of logcat:
2019-12-22 19:10:30.600 12135-12135/? E/com.example.mt: Unknown bits set in runtime_flags: 0x8000
2019-12-22 19:10:31.403 12135-12161/com.example.mt E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2019-12-22 19:10:31.404 12135-12161/com.example.mt E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
Process: com.example.mt, PID: 12135
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mt/com.example.mt.SearchActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.example.mt.SearchActivity.onCreate(SearchActivity.java:21)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2019-12-22 19:10:49.884 12135-12135/com.example.mt I/Process: Sending signal. PID: 12135 SIG: 9
Thank you!