I wrote code to make get request on Android, but I error like this:
07-07 21:12:39.674: E/AndroidRuntime(2409): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
So I read I have to use AsyncTask. I did it. One time it worked well, but next time I run app and I had that error again.
This is my code:
package app.teksty;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
private class HttpGetRequest extends AsyncTask<String, Integer, Void>
{
private InputStream content;
@Override
protected Void doInBackground(String... params) {
String url = params[0];
Log.i("[GET REQUEST]", "STARTED");
try {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(new HttpGet(url));
content = response.getEntity().getContent();
} catch (Exception e) {
Log.e("[GET REQUEST]", "Network exception", e);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
BufferedReader r = new BufferedReader(new InputStreamReader(content));
StringBuilder respond = new StringBuilder();
String line;
try {
while ((line = r.readLine()) != null) {
respond.append(line);
}
Log.i("[GET REQUEST]", respond.toString());
} catch (IOException e) {
Log.e("[GET REQUEST]", "", e);
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new HttpGetRequest().execute("http://www.google.pl");
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
What I did wrong or what I have to solve this problem?
You’re are working on main thread while working with Inputstream, and that counts as working on network. Read the whole content in doInBackground() handler, and you should be fine