简体   繁体   中英

android network connection faliure

I'm having a hard time to connect the application to the internet and retrieve the html source. Been looking all over for a solution and didn't find. Hope someone could help. Here is my code:

public class Main extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final EditText et = (EditText) findViewById(R.id.editText1);
        final Button b = (Button) findViewById(R.id.button1);
        final TextView tv = (TextView) findViewById(R.id.textView1);

        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                try {
                    URL url=null;
                    url = new URL(et.getText().toString());
                    URLConnection conn = url.openConnection();
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(conn.getInputStream()));
                    String line = "";
                    while ((line = reader.readLine()) != null) {
                        tv.append(line);
                    }

                } catch (Exception e) {

                }

            }
        });
    }

I've also added INTERNET permission..

You need to move the code which connects to the internet and fetches data to an AsyncTask . This is because of the NetworkOnMainThreadException . This exception is thrown when an application attempts to perform a networking operation on its main thread.

Though there is a workaround available by using the StrictMode.ThreadPolicy , it highly advisable not to do that.

Here is a excerpt from the docs .

NetworkOnMainThreadException:-

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged.

See this question for more info.

Because you are doing this on UI therad.

Try this:

public class Main extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final EditText et = (EditText) findViewById(R.id.editText1);
    final Button b = (Button) findViewById(R.id.button1);
    final TextView tv = (TextView) findViewById(R.id.textView1);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Thread th = new Thread() {
                @Override
                public void run() {
                    try {

                        URL url=null;
                        url = new URL(et.getText().toString());
                        URLConnection conn = url.openConnection();
                        BufferedReader reader = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                        String line = "";
                        while ((line = reader.readLine()) != null) {
                        tv.append(line);
                    }

                } catch (Exception e) {

                }
            }
        };
        th.start();
        }
    });
}

i will suggest you to use AsyncTask

Do this

On ButtonClick

RequestClient reqClient = new RequestClient(ActivityName.this);
String AppResponse = null;
AppResponse = reqClient.execute().get();

RequestClient

public class RequestClient extends AsyncTask<String, Void, String> {
    Context context;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected String doInBackground(String... params) {
        try {
            HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client
            HttpGet httpget = new HttpGet("http://yoururl.com"); // Set the action you want to do
            HttpResponse response = httpclient.execute(httpget); // Executeit
            HttpEntity entity = response.getEntity(); 
            InputStream is = entity.getContent(); // Create an InputStream with the response
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) // Read line by line
            sb.append(line + "\n");

            String resString = sb.toString(); // Result is here

            is.close(); // Close the stream
            } catch (Exception e) {
            Log.d("ANDRO_ASYNC_ERROR", "Error is " + e.toString());
        }
        Log.d("ANDRO_ASYNC_RESPONSE", responseString.trim());
        client.getConnectionManager().shutdown();
        return responseString.trim();
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM