1

このコードを使用して、Web サーバーに対して HttpGet 要求を実行します。エミュレーターでは問題なく動作しますが、私の HTC Sense では動作しません。実行は、http リクエストを実行せずに終了します。何か案が ?

File f = new File(user.getPhotopath());
List<NameValuePair> reqparams = new LinkedList<NameValuePair>();
reqparams.add(new BasicNameValuePair("email", user.getEmail()));
reqparams.add(new BasicNameValuePair("pwd", user.getPassword()));
reqparams.add(new BasicNameValuePair("name", user.getScreenName()));
reqparams.add(new BasicNameValuePair("photo", f.getName()));
reqparams.add(new BasicNameValuePair("preference", user.getPrefs()));
reqparams.add(new BasicNameValuePair("bluetoothid", bid));

String urlstring = "http://www.mysite.com/me?"+ URLEncodedUtils.format(reqparams, "utf-8");

try {
    URL url = new URL(urlstring);

URI myURI = null;
try {
    myURI = url.toURI();
} catch (URISyntaxException e) {
                e.printStackTrace();
}
HttpClient httpClient = new DefaultHttpClient();
HttpGet getMethod = new HttpGet(myURI);
HttpResponse webServerResponse = null;
HttpEntity httpEntity = null;
try {
    webServerResponse = httpClient.execute(getMethod);
    httpEntity = webServerResponse.getEntity();
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
if (httpEntity != null) {

    InputStream instream = httpEntity.getContent();
    BufferedReader reader = new BufferedReader( new InputStreamReader(instream));
    StringBuilder sb = new StringBuilder();
    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
            e.printStackTrace();
    } finally {
        try {
            resultStr = sb.toString();
            instream.close();
        } catch (IOException e) {
                e.printStackTrace();
        }
    }
4

2 に答える 2

0

スタックトレースに例外も警告もありませんでした。メモリ割り当てメッセージのみ。とにかく、 HttpClient の代わりに URLConnection を使用して解決しました:

try {
      URL url = new URL(urlstring);
      URLConnection connection = url.openConnection();
      InputStream inputStream = connection.getInputStream();
      BufferedInputStream bufferedInput = new BufferedInputStream(inputStream);

    // Read the response into a byte array
      ByteArrayBuffer byteArray = new ByteArrayBuffer(50);
      int current = 0;
      while((current = bufferedInput.read()) != -1){
            byteArray.append((byte)current);
      }

      // Construct a String object from the byte array containing the response
     resultStr = new String(byteArray.toByteArray());
    } catch (Exception e) {
      e.printStackTrace();
    }

何らかの理由でそれが機能しました。まだ何が悪かったのかを理解しようとしています。

于 2011-02-21T23:05:40.747 に答える
0

あなたのアプローチは正しく機能しますが、EntityUtilsヘルパー クラスを使用して応答本文を文字列として取得する方がはるかに簡単です。単に:

String body = EntityUtils.toString(httpEntity);
于 2011-05-05T23:07:33.050 に答える