http リクエストを処理する単純なクラスがあります。Android 3.1 以降、このタスクは別のスレッドで実行する必要があるため、リクエストが完了するまで待機する get を使用する次のスレッド ブロッキング クラスを作成しました。
初めて動作しますが、その後は常にタイムアウトになるか、アプリケーションがフリーズします。これが私のコードです:
class MakeRequest extends AsyncTask<String,Integer,Void>
{
@Override
protected Void doInBackground(String... params) {
DefaultHttpClient cli = new DefaultHttpClient();
try {
String url = params[0].replace(" ", "%20");
HttpResponse resp = cli.execute(new HttpGet(url));
BufferedReader read = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
String tmp = "",rezultat = "";
setResult("");
while ((tmp = read.readLine()) != null)
{
rezultat = rezultat + tmp;
}
setResult(rezultat);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
setResult("");
return null;
}
return null;
}
}
static public String req(Context ctx,String url,boolean want_resp)
{
if (isOnline(ctx))
{
HttpRequester cc = new HttpRequester();
MakeRequest test = cc.new MakeRequest();
test.execute(url);
if (want_resp)
{
try {
test.get(30000, TimeUnit.MILLISECONDS);
}
catch (Exception e)
{
return "FAIL";
}
return result;
}
else return "OK";
}
else
{
Toast.makeText(ctx, "Internet connection required", Toast.LENGTH_SHORT).show();
setResult("");
return "";
}
}