在JSON.getString JSONObject的空指针异常 [英] Null Pointer exception on JSON.getString JSONObject
问题描述
我试图摆脱在Android上使用PHP数据库的用户名。我把它建立在我的本地主机。 localhost上的输出是: [{ID:1,用户名:乔希,密码:通行证}]
在PHP是:
< PHP
$ CON = $ CON = mysql_connect(localhost的根,根);
如果(!$ CON){
死亡(无法连接:'mysql_error());
}
mysql_select_db(唠叨,$ CON);$结果= mysql_query(SELECT * FROM用户);而($行= mysql_fetch_assoc($结果)){
$输出[] = $行;
}打印(json_en code($输出));mysql_close($ CON);
在Java是:
公共无效setTextToTextView(JSONArray JSONArray),其中{
字符串s =;
的for(int i = 0; I< jsonArray.length();我++){
JSONObject的JSON = NULL; 尝试{
JSON = jsonArray.getJSONObject(ⅰ);
S = S +用户名:+ json.getString(用户名);
}赶上(JSONException E){
e.printStackTrace();
}
}
status.setText(多个);
}
和logcat的:
5月5日至17日:09:49.616:E / AndroidRuntime(1846年):致命异常:主要
5月5日至17日:09:49.616:E / AndroidRuntime(1846):工艺:me.docci.natter,PID:1846
5月5日至17日:09:49.616:E / AndroidRuntime(1846):显示java.lang.NullPointerException
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在me.docci.natter.Login.setTextToTextView(Login.java:75)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在me.docci.natter.Login $ CheckUser.onPostExecute(Login.java:97)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在me.docci.natter.Login $ CheckUser.onPostExecute(Login.java:1)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在android.os.AsyncTask.finish(AsyncTask.java:632)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:645)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在android.os.Handler.dispatchMessage(Handler.java:102)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在android.os.Looper.loop(Looper.java:136)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在android.app.ActivityThread.main(ActivityThread.java:5017)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在java.lang.reflect.Method.invokeNative(本机方法)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在java.lang.reflect.Method.invoke(Method.java:515)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
5月5日至17日:09:49.616:E / AndroidRuntime(1846):在dalvik.system.NativeStart.main(本机方法)
我没有使用JSON前处理,我用这个教程来得到这个code:
任何想法?
**更新**
显然,它在jsonArray给空:
这里是code
公共JSONArray getUserInfo(){
字符串的URL =HTTP://localhost/natter/index.php HttpEntity httpEntity = NULL;
尝试{
DefaultHttpClient的HttpClient =新DefaultHttpClient();
HTTPGET HTTPGET =新HTTPGET(URL); HTT presponse HTT presponse = httpClient.execute(HTTPGET); httpEntity = HTT presponse.getEntity();
}赶上(IOException异常五){
e.printStackTrace();
} JSONArray jsonArray = NULL; 如果(httpEntity!= NULL){
尝试{
字符串entityResponse = EntityUtils.toString(httpEntity); Log.e(实体回应:entityResponse); jsonArray =新JSONArray(entityResponse);
}赶上(JSONException E){
e.printStackTrace();
}赶上(IOException异常五){
e.printStackTrace();
}
} 返回jsonArray;
}
由于湿眶客,我不知道本地主机
指着本地主机
模拟器/设备上。所以我改变了URL链接字符串的URL =http://10.0.2.2/natter/index.php;
和它的工作
I am trying to get the username from a database using PHP on android. I have it set up on my localhost. the output on localhost is: [{"id":"1","username":"Josh","password":"pass"}]
The PHP is:
<?php
$con = $con = mysql_connect("localhost", "root", "root");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("natter", $con);
$result = mysql_query("SELECT * FROM users");
while($row = mysql_fetch_assoc($result)) {
$output[] = $row;
}
print(json_encode($output));
mysql_close($con);
The java is:
public void setTextToTextView(JSONArray jsonArray) {
String s = "";
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = null;
try {
json = jsonArray.getJSONObject(i);
s = s + "Username : " + json.getString("username");
} catch (JSONException e) {
e.printStackTrace();
}
}
status.setText(s);
}
and the LOGCAT:
05-17 05:09:49.616: E/AndroidRuntime(1846): FATAL EXCEPTION: main
05-17 05:09:49.616: E/AndroidRuntime(1846): Process: me.docci.natter, PID: 1846
05-17 05:09:49.616: E/AndroidRuntime(1846): java.lang.NullPointerException
05-17 05:09:49.616: E/AndroidRuntime(1846): at me.docci.natter.Login.setTextToTextView(Login.java:75)
05-17 05:09:49.616: E/AndroidRuntime(1846): at me.docci.natter.Login$CheckUser.onPostExecute(Login.java:97)
05-17 05:09:49.616: E/AndroidRuntime(1846): at me.docci.natter.Login$CheckUser.onPostExecute(Login.java:1)
05-17 05:09:49.616: E/AndroidRuntime(1846): at android.os.AsyncTask.finish(AsyncTask.java:632)
05-17 05:09:49.616: E/AndroidRuntime(1846): at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-17 05:09:49.616: E/AndroidRuntime(1846): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
05-17 05:09:49.616: E/AndroidRuntime(1846): at android.os.Handler.dispatchMessage(Handler.java:102)
05-17 05:09:49.616: E/AndroidRuntime(1846): at android.os.Looper.loop(Looper.java:136)
05-17 05:09:49.616: E/AndroidRuntime(1846): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-17 05:09:49.616: E/AndroidRuntime(1846): at java.lang.reflect.Method.invokeNative(Native Method)
05-17 05:09:49.616: E/AndroidRuntime(1846): at java.lang.reflect.Method.invoke(Method.java:515)
05-17 05:09:49.616: E/AndroidRuntime(1846): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-17 05:09:49.616: E/AndroidRuntime(1846): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-17 05:09:49.616: E/AndroidRuntime(1846): at dalvik.system.NativeStart.main(Native Method)
I have not dealt with JSON before, I used this tutorial to get this code:
Any ideas?
** UPDATE ** Apparently it is giving null in the jsonArray:
here is the code
public JSONArray getUserInfo() {
String URL = "http://localhost/natter/index.php";
HttpEntity httpEntity = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
HttpResponse httpResponse = httpClient.execute(httpGet);
httpEntity = httpResponse.getEntity();
} catch (IOException e) {
e.printStackTrace();
}
JSONArray jsonArray = null;
if(httpEntity != null) {
try {
String entityResponse = EntityUtils.toString(httpEntity);
Log.e("Entity Response : ", entityResponse);
jsonArray = new JSONArray(entityResponse);
} catch (JSONException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
return jsonArray;
}
Thanks to Squonk, I did not know that localhost
was pointing to localhost
on the emulator / device. So I changed the URL link to String URL = "http://10.0.2.2/natter/index.php";
and it worked.
这篇关于在JSON.getString JSONObject的空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!