在JSON.getString JSONObject的空指针异常 [英] Null Pointer exception on JSON.getString JSONObject

查看:4618
本文介绍了在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:

YouTube的教程

任何想法?

**更新**
显然,它在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 =htt​​p://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:

youtube tutorial

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆