0

現在の 4.0 アプリを 2.1 Android デバイスと互換性を持たせようとしています。以前は HttpResponse を呼び出すと例外が発生していましたが、その理由がわかりません。私が知っているのは、API 8 では、エラーを回避し、さらに微調整を行うためにコメントアウトする必要がある 2 行があるということだけです。これらの行が何をするのか、またはそれらが問題の原因であるかどうかは完全にはわかりません (チュートリアルのコード スニペットを変更したため) が、コードは現在機能しています....これらは私がコメントアウトした行です:

 /*StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
   StrictMode.setThreadPolicy(policy);
   */

しかし、デバッグモードです。リリース モードを試してみると、以前にアプリがフリーズしたのと同じ場所にたどり着きました... リリース モードを確認するためのデバッグ メッセージとしていくつかのトースト メッセージを配置しましたが、それらは表示されません (おそらく進行中のダイアログがあるため)。

主な問題は、デバッグ モードでは正常に動作していることです (2 つの異なるデバイスでテスト済み) が、リリース モードでは引き続き問題が発生します (デバッグすることさえできません)。

これは、アプリが失敗していると思われるコードです。デバッグ モードでは、HttpResponse を呼び出すときに失敗していました。何か案は?

public String Send(String jsonString, String url, Context ctxt)
{
    try{

        System.out.println(jsonString);

        HttpPost request = new HttpPost(url);
        request.setHeader("Accept", "text/xml");
        request.setHeader("Host", "www.my-host.com" );
        request.setHeader("Content-type", "application/json");
        StringEntity stringEnt = new StringEntity(jsonString); 
        stringEnt.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        request.setEntity(stringEnt);

        //instantiates httpclient to make request
        DefaultHttpClient httpclient = new DefaultHttpClient();

        HttpResponse response = httpclient.execute(request);
        HttpEntity responseEntity = response.getEntity();       

        //Obtenemos el xml de la respuesta
        String responseXML = EntityUtils.toString(responseEntity);
        return responseXML;
    }
    catch(Exception e)
    {
        Toast.makeText(ctxt, "Error registering user", Toast.LENGTH_SHORT).show();
        Log.i("login", "" + e.getMessage());
        return "error";
    }


}

}

ありがとう

4

1 に答える 1

1

Android 4.0 以降ではアクティビティのメイン スレッドを中断できないため、HttpResponse を呼び出すときは Asynctask を使用する必要があります。

于 2013-04-26T19:16:28.033 に答える