Java 从json获取数据,并抛出org.json.JSONException

Java 从json获取数据,并抛出org.json.JSONException,java,php,android,json,Java,Php,Android,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

将通过
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 "";
    }
@覆盖
受保护的字符串doInBackground(字符串…url){
试一试{
字符串resultText=“”;
EditText edit=(EditText)findViewById(R.id.text\u框);
id=edit.getText().toString();
List params=new ArrayList();
参数add(新的BasicNameValuePair(“id”,id));
JSONObject json=jsonParser.HttpRequest(“http://localhost/getData.php“,参数);
resultText=json.getString(“用户名”);
}捕获(例外e){
e、 printStackTrace();
Log.e(“JSON解析”,“错误”);
}
返回“”;
}
公共类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;
}
publicsimplejsonparser(){
}
公共JSONObject HttpRequest(字符串url,列表参数){
InputStream输入=null;
JSONObject jObj=null;
字符串json=“”;
弦线;
StringBuilder=新的StringBuilder();
HttpClient=new DefaultHttpClient();
paramsString=URLEncodedUtils.format(params,“utf-8”);
url+=“?”+参数字符串;
HttpGet HttpGet=新的HttpGet(url);
试一试{
HttpResponse response=client.execute(httpGet);
StatusLine StatusLine=response.getStatusLine();
if(statusLine.getStatusCode()==HttpStatus.SC\u OK){
HttpEntity=response.getEntity();
input=entity.getContent();
BufferedReader读取器=
新的BufferedReader(新的InputStreamReader(输入));
而((line=reader.readLine())!=null){
builder.append(行);
}
json=builder.toString();
}否则{
Log.e(“JSON解析器”,“未能下载文件”);
}
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
jObj=新的JSONObject(json);
input.close();
}捕获(例外e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
返回jObj;
}
}


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

根据您所提到的,您似乎是通过仿真器来执行此操作的


Emulator可能无法访问
http://localhost//
。您可以尝试使用、环回地址或ip地址进行访问

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

Emulator可能无法访问
http://localhost//
。您可以尝试使用、环回地址或ip地址进行访问

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
你显然是在连接到一个Web服务器并得到一个响应。。。我会检查PHP是否如您所期望的那样工作

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
你显然是在连接到一个Web服务器并得到一个响应。。。我会检查PHP是否如您所期望的那样工作

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

HttpClient httpClient = new DefaultHttpClient();


它是有效的。当然,在使用xampp和android emulator时,我已经将localhost替换为10.0.2.2

HttpClient httpClient = new DefaultHttpClient();


它是有效的。当然,我已经将localhost替换为10.0.2.2,因为我正在使用xampp和android emulator。

是的,访问localhost,这是android设备,而不是您的服务器。是的,访问localhost,这是android设备,而不是您的服务器。这一点很好。在过去,我对Android模拟器有太多的问题,我发现它甚至不值得这么紧张;问题是它没有内容,这很有道理。在过去,我对Android模拟器有太多的问题,我发现它甚至不值得这么紧张;问题是它没有内容。我的代码中有两个错误,一个是别人说我的URL错误,另一个是我的php文件没有返回任何内容。我想我必须打开一个新的线程询问我的php文件。我的代码中有两个错误,一个是别人说我的URL错误,另一个是我的php文件没有返回任何内容。我想我必须打开一个新的线程询问我的php文件。