Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json.getString()上的NullPointerException_Java_Android_Nullpointerexception - Fatal编程技术网

Java Json.getString()上的NullPointerException

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自动生成的方法存根

我试图用我的第一个android应用程序从mysql数据库登录一个用户,所以我使用用户名和密码来识别每个用户

我的问题是eclipse在这一行中抛出了一个
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/