我为过滤器搜索栏创建了一个 onDestroy 方法,但遇到了一个小问题。
这是我的日志:
09-01 01:55:40.147: E/AndroidRuntime(1014): FATAL EXCEPTION: main
09-01 01:55:40.147: E/AndroidRuntime(1014): java.lang.RuntimeException: Unable to destroy activity {com.stts.sparetimetradingsystem/com.stts.sparetimetradingsystem.employer.HomepageEmployerActivity}: java.lang.NullPointerException
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3655)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.app.ActivityThread.access$2900(ActivityThread.java:125)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.os.Handler.dispatchMessage(Handler.java:99)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.os.Looper.loop(Looper.java:123)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-01 01:55:40.147: E/AndroidRuntime(1014): at java.lang.reflect.Method.invokeNative(Native Method)
09-01 01:55:40.147: E/AndroidRuntime(1014): at java.lang.reflect.Method.invoke(Method.java:521)
09-01 01:55:40.147: E/AndroidRuntime(1014): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-01 01:55:40.147: E/AndroidRuntime(1014): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-01 01:55:40.147: E/AndroidRuntime(1014): at dalvik.system.NativeStart.main(Native Method)
09-01 01:55:40.147: E/AndroidRuntime(1014): Caused by: java.lang.NullPointerException
09-01 01:55:40.147: E/AndroidRuntime(1014): at com.stts.sparetimetradingsystem.employer.HomepageEmployerActivity.onDestroy(HomepageEmployerActivity.java:340)
09-01 01:55:40.147: E/AndroidRuntime(1014): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642)
09-01 01:55:40.147: E/AndroidRuntime(1014): ... 11 more
这是我的代码:
@Override
protected void onDestroy() {
super.onDestroy();
searchBarEmployer.removeTextChangedListener(filterTextWatcher); <--- LINE 340
}
* *编辑这是我的登录代码 在用户输入正确的凭据后将切换到主页。
public class LoginEmployerActivity extends Activity {
Button btnLoginEmployer;
Button btnLinkToEmployerRegisterScreen;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;
TextView forgotPassword;
// JSON Response node names
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_CNAME = "cname";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";
private ProgressDialog pDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_employer);
// Importing all assets like buttons, text fields
inputEmail = (EditText) findViewById(R.id.loginEmployerEmail);
inputPassword = (EditText) findViewById(R.id.loginEmployerPassword);
btnLoginEmployer = (Button) findViewById(R.id.btnLoginEmployer);
btnLinkToEmployerRegisterScreen = (Button) findViewById(R.id.btnLinkToEmployerRegisterScreen);
loginErrorMsg = (TextView) findViewById(R.id.login_error);
forgotPassword = (TextView) findViewById(R.id.link_to_forgetPassword);
// Login button Click Event
btnLoginEmployer.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Checking for server respond
new LoginEmployer().execute();
}
}
});
// Link to Register Screen
btnLinkToEmployerRegisterScreen
.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
RegisterEmployerActivity.class);
startActivity(i);
finish();
}
});
// Link to forgot password link
forgotPassword.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// Switching to forgot password screen
Intent i = new Intent(getApplicationContext(),
ForgotPasswordEmployerActivity.class);
startActivity(i);
}
});
}
// Background ASYNC Task to login by making HTTP Request
class LoginEmployer extends AsyncTask<String, String, String> {
// Before starting background thread Show Progress Dialog
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(LoginEmployerActivity.this);
pDialog.setMessage("Authenticating...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
// Checking login in background
protected String doInBackground(String... params) {
runOnUiThread(new Runnable() {
public void run() {
String email = inputEmail.getText().toString();
String password = inputPassword.getText().toString();
EmployerFunctions employerFunctions = new EmployerFunctions();
JSONObject json = employerFunctions.loginUser(email,
password);
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
loginErrorMsg.setText("");
String res = json.getString(KEY_SUCCESS);
if (Integer.parseInt(res) == 1) {
// user successfully logged in
// Store user details in SQLite Database
DatabaseHandlerEmployer dbe = new DatabaseHandlerEmployer(
getApplicationContext());
JSONObject json_user = json
.getJSONObject("user");
// Clear all previous data in database
employerFunctions
.logoutUser(getApplicationContext());
dbe.addUser(
json_user.getString(KEY_NAME),
//json_user.getString(KEY_CNAME),
json_user.getString(KEY_EMAIL),
json.getString(KEY_UID),
json_user.getString(KEY_CREATED_AT));
// Launch Employer homePage Screen
Intent homepage = new Intent(
getApplicationContext(),
HomepageEmployerActivity.class);
// Close all views before launching Employer
// homePage
homepage.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homepage);
// Close Login Screen
finish();
} else {
// Error in login
loginErrorMsg
.setText("Invalid username/password");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
// After completing background task Dismiss the progress dialog
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}
}
}