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 "";
    }

public class 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明らかにWebサーバーに接続して応答を取得しています...その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 に答える