【发布时间】:2014-04-08 05:28:43
【问题描述】:
我正在为我的 Android 应用程序使用电话号码和密码创建一个简单的登录活动。我想将用户输入的电话号码传递到我的欢迎屏幕,但问题是当用户第一次没有注销然后运行应用程序后,我收到了上述错误。请帮我解决这个错误。
这是我的 LoginActivity.java 文件,
public class LoginActivity extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputphone_number;
EditText inputPassword;
TextView loginErrorMsg;
// 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_PHONE_NUMBER = "phone_number";
private static String KEY_CREATED_AT = "created_at";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
// Importing all assets like buttons, text fields
inputphone_number = (EditText) findViewById(R.id.loginEmail);
inputPassword = (EditText) findViewById(R.id.loginPassword);
btnLogin = (Button) findViewById(R.id.btnLogin);
btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
loginErrorMsg = (TextView) findViewById(R.id.login_error);
// Login button Click Event
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String phone_number = inputphone_number.getText().toString();
String password = inputPassword.getText().toString();
UserFunctions userFunction = new UserFunctions();
Log.d("Button", "Login");
JSONObject json = userFunction.loginUser(phone_number, 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
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject json_user = json.getJSONObject("user");
// Clear all previous data in database
userFunction.logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_PHONE_NUMBER), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));
// Launch Dashboard Screen
Intent dashboard = new Intent(getApplicationContext(), MainActivity.class);
// this is how i sent phone number to next activity
dashboard.putExtra("phone_number", phone_number);
// Close all views before launching Dashboard
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(dashboard);
// Close Login Screen
finish();
}else{
// Error in login
loginErrorMsg.setText("Incorrect username/password");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
// Link to Register Screen
btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
RegisterActivity.class);
startActivity(i);
finish();
}
});
}
}
这是 MainActivity.java 文件,
public class MainActivity extends Activity {
UserFunctions userFunctions;
Button btnLogout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* Dashboard Screen for the application
* */
// Check login status in database
userFunctions = new UserFunctions();
if(userFunctions.isUserLoggedIn(getApplicationContext())){
setContentView(R.layout.dashboard);
TextView phone_number = (TextView) findViewById(R.id.userNameView);
Intent i = getIntent();
String phoneNumber = i.getExtras().getString("phone_number");
phone_number.setText(phoneNumber);
btnLogout = (Button) findViewById(R.id.btnLogout);
btnLogout.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
userFunctions.logoutUser(getApplicationContext());
Intent login = new Intent(getApplicationContext(), LoginActivity.class);
login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(login);
// Closing dashboard screen
finish();
}
});
}else{
// user is not logged in show login screen
Intent login = new Intent(getApplicationContext(), LoginActivity.class);
login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(login);
// Closing dashboard screen
finish();
}
// setContentView(R.layout.main);
// MainDBAdapter mainDBAdapter = new MainDBAdapter(this);
DatabaseHandler mainDBHandler = new DatabaseHandler(this);
}
public void onClickedJobs(View view){
Intent intent = new Intent(this,TourNumberList.class);
startActivity(intent);
}
}
UserFunctions.java 文件,
public class UserFunctions {
private JSONParser jsonParser;
private static String loginURL = "http://10.0.2.2/android_login_api/";
private static String registerURL = "http://10.0.2.2/android_login_api/";
private static String login_tag = "login";
private static String register_tag = "register";
// constructor
public UserFunctions(){
jsonParser = new JSONParser();
}
/**
* function make Login Request
* @param phone_number
* @param password
* */
public JSONObject loginUser(String phone_number, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", login_tag));
params.add(new BasicNameValuePair("phone_number", phone_number));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
// return json
// Log.e("JSON", json.toString());
return json;
}
/**
* function make Login Request
* @param name
* @param phone_number
* @param password
* */
public JSONObject registerUser(String name, String phone_number, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", register_tag));
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("phone_number", phone_number));
params.add(new BasicNameValuePair("password", password));
// getting JSON Object
JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
// return json
return json;
}
/**
* Function get Login status
* */
public boolean isUserLoggedIn(Context context){
DatabaseHandler db = new DatabaseHandler(context);
int count = db.getRowCount();
if(count > 0){
// user logged in
return true;
}
return false;
}
/**
* Function to logout user
* Reset Database
* */
public boolean logoutUser(Context context){
DatabaseHandler db = new DatabaseHandler(context);
db.resetTables();
return true;
}
}
这是 LogCat 错误,
04-08 10:27:56.763: E/AndroidRuntime(342): FATAL EXCEPTION: main
04-08 10:27:56.763: E/AndroidRuntime(342): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tourinfo/com.example.tourinfo.MainActivity}: java.lang.NullPointerException
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.os.Handler.dispatchMessage(Handler.java:99)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.os.Looper.loop(Looper.java:123)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.ActivityThread.main(ActivityThread.java:3683)
04-08 10:27:56.763: E/AndroidRuntime(342): at java.lang.reflect.Method.invokeNative(Native Method)
04-08 10:27:56.763: E/AndroidRuntime(342): at java.lang.reflect.Method.invoke(Method.java:507)
04-08 10:27:56.763: E/AndroidRuntime(342): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-08 10:27:56.763: E/AndroidRuntime(342): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-08 10:27:56.763: E/AndroidRuntime(342): at dalvik.system.NativeStart.main(Native Method)
04-08 10:27:56.763: E/AndroidRuntime(342): Caused by: java.lang.NullPointerException
04-08 10:27:56.763: E/AndroidRuntime(342): at com.example.tourinfo.MainActivity.onCreate(MainActivity.java:37)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-08 10:27:56.763: E/AndroidRuntime(342): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-08 10:27:56.763: E/AndroidRuntime(342): ... 11 more
【问题讨论】:
-
网络操作不应在主线程上执行。
-
第 37 行是什么?
-
您是否在您的清单中声明了 mainactivity..?
-
这是第 37 行- String phoneNumber = i.getExtras().getString("phone_number");
-
登录活动未正确传递电话号码..
标签: java android json nullpointerexception