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 map = new HashMap(); map.put("username", params[0]); map.put("password", params[1]); StringBuilder sb = new StringBuilder(); for(HashMap.Entry 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

  "true"); echo json_encode($returnValue); } else { $returnValue[] = array("loginStatus"=> "false"); echo json_encode($returnValue); } mysql_close($connection); } ?> 

使用来自Google的 Volley 网络库 。 请遵循本教程 。 要了解有关Volley的更多信息,请参阅此链接

还有其他网络库,如okHttp 。

到目前为止,您的代码被认为是:

替换json = result.toString(); with json = sb2.toString(); 在第137行

代替

 json = result.toString(); 

你应该做

 json = sb2.toString(); 

说明

退出时你的while循环,结果将为null,因此执行result.toString()会导致nullpointerexception。

任何其他图书馆

您可以使用GSON库来帮助您获得/设置响应值,而不会遇到任何障碍。

GSON错误