-1

Android 2.2 API で動作するコードを書きましたが、Android 4.0 では動作しません

 String url = textUrl.getText().toString();
     HttpClient client = new DefaultHttpClient();
     HttpGet  request = new HttpGet(url);
     try
     {
        HttpResponse response = client.execute(request);
        textResult.setText(HttpHelper.request(response));
     }
     catch (Exception e) {
        // TODO: handle exception
         textResult.setText("Failed");
    }
4

3 に答える 3

1

インターネット通信は別のスレッドで実行する必要があります。

これを簡素化するには、 AsyncTaskを使用します。

Android のスレッドの詳細については、こちらをご覧ください。

編集: メインスレッドでインターネットにアクセスしたい場合はonCreate()、次のコードを使用してメソッドでアクセスを許可できます。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);

ただし、この方法はあまりお勧めしません。

于 2012-08-30T09:31:05.233 に答える
1

Android 2.x のメイン スレッドから URL を呼び出すと、完全に実行されます。

ただし、HonyCumb とその上位バージョンでは、ワーカー スレッドから URL を呼び出す必要があります。

そのためにAsyncTaskを使用できます。

于 2012-10-17T07:53:51.613 に答える
0

私は同じ問題を抱えています。解決策は非常に単純です。AsyncTaks を使用する必要があります。それらを実装するには、新しいクラスを作成するだけです。ペ:

public class AsynkTaskRequest extends AsyncTask<String, Void, String> {


    @Override
    protected String doInBackground(String... params) {
        String answer = null;

        for (String request : params) {
            //your code comes here
        }
    }
}

詳細については、少し検索すると見つかります (「今回はあなたを検索しました」)。

編集: 使用しないでください:

catch (Exception e) {
    // TODO: handle exception
     textResult.setText("Failed");
}

好きにする

catch (Exception e) {
    //if you use logcat in eclipse    
    Log.e("Request Error", e.getMessage());
    //else
    System.out.println(e.getMessage());     
}
于 2012-08-30T09:36:27.167 に答える