0

編集:「こんにちは」は削除されました。だから、こんにちは。

URLに到達することで、応答として文字列を取得する必要があります。そこで、このWebサイトでコードの一部を借用し、文字列を変数に変換するメソッドを採用しました。残念ながら、「Try」ブロックはスキップされ、返される文字列は「*」です。このスクリプトについて何を誤解しましたか?

変数「応答」は、応答として取得する必要があるものですか、それとも他のものですか?

前もって感謝します。

    private String getMessages() {
    String response = "***";
    try {
        HttpClient client = new DefaultHttpClient();  
        String getURL = "http://***.com/message/";
        HttpGet get = new HttpGet(getURL);
        HttpResponse responseGet = client.execute(get);  
        HttpEntity resEntityGet = responseGet.getEntity();  
        if (resEntityGet != null) {  
            // do something with the response
            response = EntityUtils.toString(resEntityGet);
            Log.i("GET RESPONSE", response);
        }
    } catch (Exception e) {
        e.printStackTrace();

    }

    return response;
}
4

5 に答える 5

0

これが正しく機能するかどうかはわかりませんが、これが基本的な考え方です。

StringBuilder builder = new StringBuilder();
InputStream content = entity.getContent();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }
String response = builder.toString();

アップデート:

これは私のコードの短い断片であり、問​​題なく機能しています。

int statusCode = mResponse.getStatusLine().getStatusCode();
                    InputStream is = null;
                    StringBuilder stringBuilder = new StringBuilder();
                    if (statusCode == HttpStatus.SC_OK) {
                        HttpEntity entity = mResponse.getEntity();
                        if (entity != null) {
                            try {
                                is = entity.getContent();
                            } catch (IllegalStateException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            byte[] buffer = new byte[1024];
                            int length;
                            try {
                                while ((length = is.read(buffer)) > 0) {
                                    stringBuilder.append(new String(buffer, 0, length));
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }

ちなみに、バッファリングされた読み取りは選択できる最善の解決策ですが、HTTPEntityがnullであってはならない前に気付いたので、私はあなたの問題だとは思いません。したがって、HTTPRequestに何か問題があると思います。リクエスト-フィドラーを使用した結果。

于 2013-01-15T21:36:16.577 に答える
0

これが私が通常使用するものです(getの代わりにpostしますが、同じである必要があります)。

public String getMessage(){
InputStream is = null;      
String result = "";
    //http post
    try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(<url>);
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
            nameValuePairs.add(new BasicNameValuePair("var1", var1));   

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

    }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
    }
    //convert response to string
    try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
    }catch(Exception e){
            Log.e("log_tag", "Error converting result "+e.toString());
    }
    Log.i("result string", result);

    }
}
于 2013-01-15T22:26:51.217 に答える
0

これは私たちがアプリで使用しているものであり、JSON文字列を取得するのに非常に便利です

    String response = "";
    try {
        HttpClient httpClientpost = new DefaultHttpClient();
        String postURL = "http://somepostaddress.com";
        HttpPost post = new HttpPost(postURL);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("postName1", "value1"));
        params.add(new BasicNameValuePair("postName2", "value2"));
        params.add(new BasicNameValuePair("postName3", "value3"));
        //And So On

        UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params);
        post.setEntity(ent);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        HttpResponse responsePOST = httpClientpost.execute(post);
        HttpEntity resEntity = responsePOST.getEntity();

        //Server Response
        response = EntityUtils.toString(resEntity);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2013-01-16T02:26:56.907 に答える
0

これをUIスレッドから呼び出していると思いますが、Androidは、メインスレッドでネットワークI/Oを実行できないという例外をスローしています。catchブロックが例外を無視し、e.printStrackTrace()例外をlogcatにダンプしないため、おそらくこれは表示されません(Log.e("tag", "boom", e);実際にログに表示するには、を呼び出す必要があります)。

例外が発生していることを確認することから始めます(ロギングを修正するか、例外を再スローします)。その場合は、AsyncTaskに移動するなどして、別のスレッドからこれを呼び出す必要があります。

于 2013-01-16T03:09:05.813 に答える
0

AnsyncTaskではなくActivityでそれを実行しようとしていました。doInBackgroundでより適切に動作するようになりました。

皆さん、ありがとうございました。

于 2013-01-17T19:50:41.727 に答える