0

将收到以下 json 但通过http://localhost/getData.php但抛出异常

{"username":"not found","password":null}

我收到的日志

02-19 17:31:54.745: E/JSON Parser(5277): Error parsing data org.json.JSONException: End of input at character 0 of 
02-19 17:31:59.185: E/JSON Parse(5277): ERROR

以下代码是抛出异常的方法

@Override
    protected String doInBackground(String... url){         

        try{
            String resultText = "";
            EditText edit = (EditText)findViewById(R.id.text_box);
            id = edit.getText().toString();
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id",id));

            JSONObject json = jsonParser.HttpRequest("http://localhost/getData.php", params);

            resultText = json.getString("username");



        }catch(Exception e){
            e.printStackTrace();
            Log.e("JSON Parse","ERROR");
        }

        return "";
    }

公共类 SimpleJsonParser {

public SimpleJsonParser(){

}


public JSONObject HttpRequest(String url, List<NameValuePair> params){
    InputStream input = null;
    JSONObject jObj = null;
    String json = "";
    String line;

    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    paramsString = URLEncodedUtils.format(params,"utf-8");
    url += "?" + paramsString;
    HttpGet httpGet = new HttpGet(url);


    try{


        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();

        if(statusLine.getStatusCode() == HttpStatus.SC_OK){
            HttpEntity entity = response.getEntity();
            input = entity.getContent();
            BufferedReader reader = 
                    new BufferedReader(new InputStreamReader(input));


            while((line = reader.readLine())!=null){
                builder.append(line);
            }
            json = builder.toString();

        } else {
            Log.e("JSON Parser","Failed to download file");
        }
    }catch(ClientProtocolException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }

    try {
        jObj = new JSONObject(json);
        input.close();
    } catch (Exception e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    return jObj;
}

}

我的代码有什么问题吗?我提供的代码是发生异常的地方

4

3 回答 3

2

从您提到的内容来看,您似乎是通过模拟器执行此操作的。

模拟器可能无法访问http://localhost//。您可以尝试使用环回地址或IP地址进行访问。

于 2013-02-19T17:49:20.803 回答
2

从. _ _ HttpEntity该异常告诉您在字符 0(第一个字符)处没有输入 - 您没有什么可解析的;这是一个空字符串。您的StringBuilder.

public static void main(String[] args) throws JSONException
{
    String json = "{\"username\":\"not found\",\"password\":null}";
    JSONObject  jObj = new JSONObject(json);
}   

不会抛出这样的异常。通常编写一个小测试用例会为您指明正确的方向。

正如其他人所提到的,这可能是因为您使用了错误的 URL 或者您的参数?既然你回来了200 OK,你显然是在连接到一个网络服务器并得到一个响应......我会检查一下 PHP 是否按你期望的那样工作。

于 2013-02-19T17:52:36.193 回答
0

在 simpleJarsonParser 类中,我替换了以下代码

HttpClient httpClient = new DefaultHttpClient();

DefaultHttpClient httpClient = new DefaultHttpClient();

它有效。当然,当我使用 xampp 和 android 模拟器时,我已将 localhost 替换为 10.0.2.2。

于 2013-02-20T13:12:37.520 回答