Intereting Posts
Как сделать Symfony2 автозагрузкой моей routing.yml для моих пакетов, которые я создаю в папке поставщиков? внезапно запускается $ _SERVER 10.10.10.10 php Получить координаты широты / долготы с карты Google с помощью маркера Производительность файла PHP_put_contents на 750 тыс. Строк текстовых файлов multi textfield с автозаполнением, но почему только первый PDO_ODBC: имя источника данных не найдено и указанный драйвер по умолчанию не указан Плюсы / минусы использования index.php? Q = путь / вместо index.php / path / при маршрутизации URL-адресов? он вставляет пустое значение для ImageId mysqli + xdebug точка останова после закрытия оператора приводит к многочисленным предупреждениям Расширять черты с классами в PHP? Как сохранить JQuery UI упорядоченные позиции таблицы в базе данных MySQL? Переопределить существующую определенную константу php include_once не работает, несмотря на наличие файла и 777 разрешений Преобразование SVG-изображения в PNG с помощью PHP Функция Move_uploaded_file () не работает

Android отправляет данные на php и получает исключение nullpointerexception

Я новичок в разработке Android, и я не уверен, что мне не хватает, чтобы код работал. Попытка создать приложение для входа в систему. Может ли быть проблема с тем, как я получаю данные или отправляю данные с помощью dataoutputstream? есть ли лучший способ, который не является устаревшим и сложным. Ищите наиболее минималистичное понятное решение.

Сделайте в фоновом коде

@Override protected Boolean doInBackground(String... params) { DataOutputStream printout; HttpURLConnection urlConn; BufferedReader reader; URL url; String json; JSONObject jObj; //send POST login details to server try { url = new URL(SERVER_ADDRESS + "login.php"); urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("POST"); urlConn.setDoOutput(true); urlConn.setRequestProperty("Accept-Charset", "UTF-8"); urlConn.setReadTimeout(10000); urlConn.setConnectTimeout(15000); HashMap<String, String> map = new HashMap<String, String>(); map.put("username", params[0]); map.put("password", params[1]); StringBuilder sb = new StringBuilder(); for(HashMap.Entry<String, String> e : map.entrySet()){ if(sb.length() > 0){ sb.append("&"); } sb.append(URLEncoder.encode(e.getKey(), "UTF-8")).append("=").append(URLEncoder.encode(e.getValue(), "UTF-8")); } String loginDetails = sb.toString(); printout = new DataOutputStream(urlConn.getOutputStream()); printout.writeBytes(loginDetails); printout.flush(); printout.close(); reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); StringBuilder sb2 = new StringBuilder(); String result = null; while((result=reader.readLine())!=null) { sb2.append(result + '\n'); Log.d("Results", sb2.toString()); }; json = result.toString(); jObj = new JSONObject(json); JSONLogin = jObj.getBoolean(TAG_LOGINSTATUS); Log.d("LoginStatus!!!!", JSONLogin.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { Log.d("JsonConvertion", "FAILED TO CONVERT JSON"); } return JSONLogin; } 

Ошибка стека

 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: Process: com.httpkhronolog.khronolog, PID: 2459 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground() 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java:309) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:137) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:79) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:295) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818) 

login.php

 <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ // Establishing Connection with Server by passing server_name, user_id and password as a parameter $connection = mysql_connect("localhost", "someusername", "Password"); // Selecting Database $db = mysql_select_db("khronolo_systemdb", $connection); $username = $_POST["username"]; $password = $_POST["password"]; $query = "SELECT * FROM user_table WHERE password='$password' AND email='$username';"; $result = mysql_query($query, $connection) or die (mysql_error($connection)); $rows = mysql_num_rows($result); if ($rows == 1) { $returnValue[] = array("loginStatus"=> "true"); echo json_encode($returnValue); } else { $returnValue[] = array("loginStatus"=> "false"); echo json_encode($returnValue); } mysql_close($connection); } ?> 

Используйте Volley Network Library от Google . Следуйте этому руководству для этого же. Чтобы узнать больше о Volley, перейдите по этой ссылке

Существуют также другие сетевые библиотеки, такие как okHttp .

И теперь ваш код считается:

замените json = result.toString(); с json = sb2.toString(); по строке 137

Вместо

 json = result.toString(); 

Ты должен сделать

 json = sb2.toString(); 

объяснение

Ваш цикл while при выходе, результат будет пустым, поэтому результат result.toString() приведет к ошибке nullpointer.

Любая другая библиотека

Вы можете использовать библиотеку GSON, чтобы помочь вам получить / установить значения ответов без каких-либо препятствий.

Ошибка GSON