Java Json.getString()上的NullPointerException
我试图用我的第一个android应用程序从mysql数据库登录一个用户,所以我使用用户名和密码来识别每个用户 我的问题是eclipse在这一行中抛出了一个Java Json.getString()上的NullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,我试图用我的第一个android应用程序从mysql数据库登录一个用户,所以我使用用户名和密码来识别每个用户 我的问题是eclipse在这一行中抛出了一个NullPointerException错误: if (json.getString(KEY_SUCCESS) != null 日志: 类AsyncLogin扩展了AsyncTask{ 私有静态字符串密钥\u SUCCESS=“SUCCESS”; 受保护的布尔doInBackground(字符串…参数){ //TODO自动生成的方法存根
NullPointerException
错误:
if (json.getString(KEY_SUCCESS) != null
日志:
类AsyncLogin扩展了AsyncTask{
私有静态字符串密钥\u SUCCESS=“SUCCESS”;
受保护的布尔doInBackground(字符串…参数){
//TODO自动生成的方法存根
UserFunctions userFunction=新的UserFunctions();
Log.d(“按钮”、“登录”);
JSONObject json=userFunction.loginUser(参数[0],参数[1]);
//检查登录响应
试一试{
if(json.getString(KEY_SUCCESS)!=null){
String res=json.getString(KEY_SUCCESS);
if(Integer.parseInt(res)==1){
返回true;
}否则{
返回false;
}
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
}
公共类用户函数{
private JSONParser jsonParser;
private static String loginURL = "http://website.org/android_login_api/";
private static String login_tag = "login";
// constructor
public UserFunctions(){
jsonParser = new JSONParser();
}
/**
* function make Login Request
* @param username
* @param password
* */
public JSONObject loginUser(String username, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", login_tag));
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
//Log.e("JSON", json.toString());
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;
}
private-JSONParser-JSONParser;
专用静态字符串loginURL=”http://website.org/android_login_api/";
私有静态字符串login_tag=“login”;
//建造师
公共用户函数(){
jsonParser=新的jsonParser();
}
/**
*函数发出登录请求
*@param用户名
*@param密码
* */
公共JSONObject登录用户(字符串用户名、字符串密码){
//建筑参数
List params=new ArrayList();
添加(新的BasicNameValuePair(“标签”,登录标签));
添加(新的BasicNameValuePair(“用户名”,用户名));
添加(新的BasicNameValuePair(“密码”,password));
JSONObject json=jsonParser.getJSONFromUrl(loginURL,params);
//Log.e(“JSON”,JSON.toString());
返回json;
}
/**
*函数获取登录状态
* */
公共布尔值isUserLoggedIn(上下文){
DatabaseHandler db=新的DatabaseHandler(上下文);
int count=db.getRowCount();
如果(计数>0){
//用户登录
返回true;
}
返回false;
}
/**
*用于注销用户的函数
*重置数据库
* */
公共布尔logoutUser(上下文){
DatabaseHandler db=新的DatabaseHandler(上下文);
db.resetTables();
返回true;
}
}检查json文本的实际外观,我在网上搜索了getJSONFromUrl,并从以下来源找到:
http://www.androidhive.info/2012/01/android-json-parsing-tutorial/
如果json错误,它实际上返回null 这应该意味着
json
为空。登录用户
返回什么?还要记住,如果AsyncTask操作需要很长时间才能完成,那么使用get()
仍然会阻塞UI线程。谢谢,我将发布userFunction类..我看到您注释掉了//Log.e(“JSON”,JSON.toString())
在未注释时是否也会抛出NPE?知道如何修复它吗?“非常感谢你!”米克尔说。如果注释掉Log.e(“JSON”,JSON.toString())代码>就像你在digitaljoel的解决方案之前所做的那样。但是,我鼓励您了解JSON错误的原因,否则用户可能无法登录。它编写得相当糟糕,使用了类静态变量等等
class AsyncLogin extends AsyncTask<String, Void, Boolean> {
private static String KEY_SUCCESS = "success";
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
UserFunctions userFunction = new UserFunctions();
Log.d("Button", "Login");
JSONObject json = userFunction.loginUser(params[0], params[1]);
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
String res = json.getString(KEY_SUCCESS);
if (Integer.parseInt(res) == 1) {
return true;
} else {
return false;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
private JSONParser jsonParser;
private static String loginURL = "http://website.org/android_login_api/";
private static String login_tag = "login";
// constructor
public UserFunctions(){
jsonParser = new JSONParser();
}
/**
* function make Login Request
* @param username
* @param password
* */
public JSONObject loginUser(String username, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", login_tag));
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
//Log.e("JSON", json.toString());
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;
}
http://www.androidhive.info/2012/01/android-json-parsing-tutorial/