从phpMyAdmin返回JSON时出现Android NullPointerException


Android NullPointerException when returning JSON from phpMyAdmin

我在Android编程中尝试将phpMyAdmin与MySQL数据库连接时遇到了一些问题。以下是我试图从php方法返回结果的部分:

public boolean getLogin(UserModel userModel) {
    String username = userModel.getUserName();
    String password = userModel.getPassword();
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    // getting JSON string from URL
    JSONObject json = jParser.makeHttpRequest(url, "GET", params);
    params.add(new BasicNameValuePair("getlogin", "1"));
    params.add(new BasicNameValuePair("userid", username));
    params.add(new BasicNameValuePair("password", password));
    try {   
        int success = json.getInt(TAG_SUCCESS);
        if (success == 1) {
            return true;
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return false;
}

php中的代码:

else if(isset($_GET['getlogin'])){
$userid = $_GET['userid'];
$password = $_GET['password'];
$result = mysql_query("SELECT * FROM borrower WHERE userid = '$userid' AND password = '$password'");
if (mysql_num_rows($result) > 0) 
    $response["success"] = 1;
else
    $response["success"] = 0;
echo json_encode($response);
}

并将错误消息作为堆栈跟踪:

02-14 21:57:19.967: D/dalvikvm(29822): GC_FOR_ALLOC freed 70K, 11% free 9471K/10567K, paused 18ms
02-14 21:57:19.975: I/dalvikvm-heap(29822): Grow heap (frag case) to 10.680MB for 589840-byte allocation
02-14 21:57:19.999: D/dalvikvm(29822): GC_CONCURRENT freed 1K, 11% free 10045K/11207K, paused 1ms+2ms
02-14 21:57:20.147: D/TextLayoutCache(29822): Using debug level: 0 - Debug Enabled: 0
02-14 21:57:20.257: D/CLIPBOARD(29822): Hide Clipboard dialog at Starting input: finished by someone else... !
02-14 21:57:35.272: I/URL(29822): http://192.168.0.101/lms/dataprocess.php
02-14 21:57:36.483: E/JSON Parser(29822): Error parsing data org.json.JSONException: End of input at character 0 of 
02-14 21:57:36.491: W/dalvikvm(29822): threadid=11: thread exiting with uncaught exception (group=0x40c341f8)
02-14 21:57:36.632: E/AndroidRuntime(29822): FATAL EXCEPTION: AsyncTask #1
02-14 21:57:36.632: E/AndroidRuntime(29822): java.lang.RuntimeException: An error occured while executing doInBackground()
02-14 21:57:36.632: E/AndroidRuntime(29822):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.lang.Thread.run(Thread.java:856)
02-14 21:57:36.632: E/AndroidRuntime(29822): Caused by: java.lang.NullPointerException
02-14 21:57:36.632: E/AndroidRuntime(29822):    at Controller.UserController.getLogin(UserController.java:47)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at AsyncTask.GetLoginAsyncTask.doInBackground(GetLoginAsyncTask.java:22)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at AsyncTask.GetLoginAsyncTask.doInBackground(GetLoginAsyncTask.java:1)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-14 21:57:36.632: E/AndroidRuntime(29822):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-14 21:57:36.632: E/AndroidRuntime(29822):    ... 5 more
02-14 21:57:45.366: I/Process(29822): Sending signal. PID: 29822 SIG: 9

空指针异常部分在那里的try-catch处。有什么想法吗?提前谢谢。

当从浏览器访问url时,这是返回时的数据:

{"success":1}

您实际上并没有发出web请求。您所做的错误是直接尝试解析JSON,而没有发出实际的web请求。

错误:

 JSONObject json = jParser.makeHttpRequest(url, "GET", params);
    params.add(new BasicNameValuePair("getlogin", "1"));
    params.add(new BasicNameValuePair("userid", username));
    params.add(new BasicNameValuePair("password", password));
    try {   
        int success = json.getInt(TAG_SUCCESS);  
       // Here 'json' is an object you are required to pass in a request
       // you are making a web request and without it, you are trying to parse it, which is actually not the response you are expecting from server
        if (success == 1) {
            return true;
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

检查这个问题如何将字符串数组作为HTTPPOST的基本名称值对发送?,根据您的要求,获取参考资料并编写代码。