У меня возникла проблема при попытке подключить phpMyAdmin к базе данных MySQL в Android-программировании. Вот часть, где я попытался получить результат, полученный из моего метода 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}
На самом деле вы не делаете веб-запрос. Ошибка, которую вы делаете, заключается в том, что вы прямо пытаетесь разобрать JSON без фактического веб-запроса.
Ошибка:
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();
}
Проверьте этот вопрос Как отправить массив String в качестве базовой пары значений имени HTTPPOST? , возьмите ссылку и напишите код согласно вашему требованию.