Search code examples
androidhttphttpresponsehttp-getandroidhttpclient

Retrieving data from a website not working (Android)


I use the following class to retrieve data from a website:

public class GetMethodEx {
    public String getInternetData() throws Exception {
        BufferedReader in = null;
        String data = null;
        try {
            HttpClient client = new DefaultHttpClient();
            URI website = new URI("http://www.google.com");
            HttpGet request = new HttpGet();
            request.setURI(website);
            HttpResponse response = client.execute(request);
            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer sb = new StringBuffer("");
            String l = "";
            String nl = System.getProperty("line.separator");
            while ((l = in.readLine()) != null) {
                sb.append(l + nl);
            }
            in.close();
            data = sb.toString();
            return data;
        } finally {
            if (in != null) {
                try {
                    in.close();
                    return data;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

And the following class uses the above class to print the retrieved data on the screen:

public class HttpExample extends Activity {

    TextView httpStuff;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.httpex);
        httpStuff = (TextView) findViewById(R.id.tvHttp);
        GetMethodEx test = new GetMethodEx();
        String returnedData = null;         
        try {
            returnedData = test.getInternetData();
            httpStuff.setText(returnedData);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

I have set the "httpStuff" TextView to "loading..." in the "httpex" xml. Now the problem I am facing is that when I run the app, it is stuck at this "loading..." forever. Any ideas why?

Thanks.

PS: I have added the permission "android.permission.INTERNET" in the manifest.


EDIT: Actually I have a duplicate question which has the correct solution. Anyway, thanks!


Solution

  • Make sure to check LogCat to look for potential error messages. I'm guessing you didn't request the Internet permission in your AndroidManifest.xml.

    Add

    <uses-permission android:name="android.permission.INTERNET" />
    

    outside the application tag in your AndroidManifest.xml

    Edit: Also, you should avoid running network requests on the UI thread. On later versions of android (Honeycombe and later I believe) you'll get a NetworkOnMainThreadException, which could also cause the issue you're facing.

    Try using an AsyncTask to run this request. See the answer here:

    How to fix android.os.NetworkOnMainThreadException?