Android Network is unreachable - ENETUNREACH
Asked Answered
A

5

22

I'm having a weird error on my android application. I'm testing with a local server using Xampp. The App is to retrieve records from a Database and store them in the phone.

The thing is I have tested the app in a Motorola XT550 with Android 2.3.6 and in my Sony Xperia S with Android 4.0.4 and the app works just fine. But when I test it with a Samsung Fame with Android 4.1.2 (my client's phone) it doesn't work.

Here is the LogCat:

02-22 04:48:33.001    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
02-22 04:48:33.001    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
02-22 04:48:33.001    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at com.sistel.manantiales.SyncActivity$DatabaseSync.updateDatabase(SyncActivity.java:198)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at com.sistel.manantiales.SyncActivity$DatabaseSync.doInBackground(SyncActivity.java:165)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at com.sistel.manantiales.SyncActivity$DatabaseSync.doInBackground(SyncActivity.java:147)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-22 04:48:33.011    3961-3976/com.sistel.manantiales W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-22 04:48:33.021    3961-3976/com.sistel.manantiales W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-22 04:48:33.021    3961-3976/com.sistel.manantiales W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-22 04:48:33.021    3961-3976/com.sistel.manantiales W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
02-22 04:48:33.021    3961-3976/com.sistel.manantiales W/System.err﹕ Caused by: java.net.ConnectException: failed to connect to /10.0.0.7 (port 80) after 15000ms: connect failed: ENETUNREACH (Network is unreachable)
02-22 04:48:33.021    3961-3976/com.sistel.manantiales W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:114)
02-22 04:48:33.031    3961-3976/com.sistel.manantiales W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
02-22 04:48:33.031    3961-3976/com.sistel.manantiales W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
02-22 04:48:33.031    3961-3976/com.sistel.manantiales W/System.err﹕ at java.net.Socket.connect(Socket.java:842)
02-22 04:48:33.031    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
02-22 04:48:33.031    3961-3976/com.sistel.manantiales W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
02-22 04:48:33.031    3961-3976/com.sistel.manantiales W/System.err﹕ ... 15 more
02-22 04:48:33.041    3961-3976/com.sistel.manantiales W/System.err﹕ Caused by: libcore.io.ErrnoException: connect failed: ENETUNREACH (Network is unreachable)
02-22 04:48:33.081    1216-1467/? V/AudioFlinger﹕ presentationComplete() session 35 complete: framesWritten 940032
02-22 04:48:33.081    1216-1467/? V/AudioFlinger﹕ TrackBase::reset
02-22 04:48:33.091    3961-3976/com.sistel.manantiales W/System.err﹕ at libcore.io.Posix.connect(Native Method)
02-22 04:48:33.091    3961-3964/com.sistel.manantiales D/dalvikvm﹕ GC_CONCURRENT freed 197K, 13% free 7645K/8775K, paused 16ms+16ms, total 54ms
02-22 04:48:33.091    3961-3976/com.sistel.manantiales W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
02-22 04:48:33.091    3961-3976/com.sistel.manantiales W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
02-22 04:48:33.101    3961-3976/com.sistel.manantiales W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:112)
02-22 04:48:33.101    3961-3976/com.sistel.manantiales W/System.err﹕ ... 20 more
02-22 04:48:33.101    1577-1800/? D/PowerManagerService﹕ acquireDVFSLockLocked : type : DVFS_MIN_LIMIT  frequency : 999999  uid : 1000  pid : 1577  tag : ActivityManager
02-22 04:48:33.101    1577-1800/? W/ActivityManager﹕ mDVFSLock.acquire()
02-22 04:48:33.141    1577-1800/? D/BatteryStatsImpl﹕ ++++++xy WakeLock start : pid=1577, name=, type=0, tid=1800, pid=1577, pName=null
02-22 04:48:33.161    1577-1588/? D/WindowManager﹕ PhoneWindowManager: focusChangedLw
02-22 04:48:33.161    1577-1588/? D/WindowManager﹕ updateReadingMode
02-22 04:48:33.161    1577-1588/? D/KeyguardViewMediator﹕ setHidden false
02-22 04:48:33.161    1577-1588/? D/WindowManager﹕ mInputFocus is not null.
02-22 04:48:33.161    1577-1588/? D/WindowManager﹕ mInputFocus is not null.
02-22 04:48:33.161    1577-1588/? D/WindowManager﹕ mInputFocus is not null.
02-22 04:48:33.191    3961-3961/com.sistel.manantiales D/AbsListView﹕ Get MotionRecognitionManager
02-22 04:48:33.211    3961-3976/com.sistel.manantiales W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x411ba2a0)
02-22 04:48:33.211    1577-1810/? D/WindowManager﹕ mInputFocus is not null.
02-22 04:48:33.211    3961-3976/com.sistel.manantiales E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
        java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: java.lang.IllegalArgumentException: HTTP entity may not be null
        at org.apache.http.util.EntityUtils.toString(EntityUtils.java:110)
        at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
        at com.sistel.manantiales.SyncActivity$DatabaseSync.updateDatabase(SyncActivity.java:217)
        at com.sistel.manantiales.SyncActivity$DatabaseSync.doInBackground(SyncActivity.java:165)
        at com.sistel.manantiales.SyncActivity$DatabaseSync.doInBackground(SyncActivity.java:147)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

And Here is my code:

public class DatabaseSync extends AsyncTask<String, Void, Boolean> {

        @Override
        protected Boolean doInBackground(String... url) {

            try {
                clientDataSource.open();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                movementDataSource.open();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            clientDataSource.deleteAllClients();
            updateDatabase(url[0]);

            return null;
        }

        @Override
        protected void onPostExecute(Boolean bool) {
            super.onPostExecute(bool);
        }

        public void updateDatabase(String url) {

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("Operation", "Download"));
                nameValuePairs.add(new BasicNameValuePair("Value", "Download"));

                HttpParams httpParams = new BasicHttpParams();

                HttpConnectionParams.setConnectionTimeout(httpParams, 15000);
                HttpConnectionParams.setSoTimeout(httpParams, 15000);

            HttpClient httpClient = new DefaultHttpClient(httpParams);
            HttpPost httpPost = new HttpPost(url);

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            HttpResponse httpResponse = null;

            try {
                httpResponse = httpClient.execute(httpPost);
            } catch (IOException e) {
                e.printStackTrace();
            }

            HttpEntity httpEntity = null;

            try {
                httpEntity = httpResponse.getEntity();
            }catch (NullPointerException e) {

                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);

            }


            String result = "empty";
            try {
                result = EntityUtils.toString(httpEntity);
            } catch (IOException e) {
                e.printStackTrace();
            }

            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(result);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            JSONArray jsonClients = null;

            try {
                jsonClients =  jsonObject.getJSONArray("clients");
            } catch (JSONException e) {
                e.printStackTrace();
            }

            long id = 0;
            String name;
            String address;
            String locality;
            long bonus = 0;
            double price = 0.0;
            double prev_balance = 0.0;
            double balance = 0.0;
            long prev_bottles = 0;
            long bottles = 0;
            String update_date;
            String sync_date;

            for(int i = 0; i < jsonClients.length(); i++) {
                JSONObject json = null;
                try {
                    json = jsonClients.getJSONObject(i);

                    String s_id = new String(Base64.decode(json.get("id").toString(),Base64.DEFAULT));
                    name = new String(Base64.decode(json.get("name").toString(),Base64.DEFAULT));
                    address = new String(Base64.decode(json.get("address").toString(), Base64.DEFAULT));
                    locality = new String(Base64.decode(json.get("locality").toString(), Base64.DEFAULT));
                    String s_bonus = new String(Base64.decode(json.get("bonus").toString(), Base64.DEFAULT));
                    String s_price = new String(Base64.decode(json.get("price").toString(), Base64.DEFAULT));
                    String s_prev_balance = new String(Base64.decode(json.get("prev_balance").toString(), Base64.DEFAULT));
                    String s_balance = new String(Base64.decode(json.get("balance").toString(), Base64.DEFAULT));
                    String s_prev_bottles = new String(Base64.decode(json.get("prev_bottles").toString(), Base64.DEFAULT));
                    String s_bottles = new String(Base64.decode(json.get("bottles").toString(), Base64.DEFAULT));
                    update_date = new String(Base64.decode(json.get("update_date").toString(), Base64.DEFAULT));
                    sync_date = new String(Base64.decode(json.get("sync_date").toString(), Base64.DEFAULT));

                    id = Long.parseLong(s_id);
                    bonus = Long.parseLong(s_bonus);
                    price = Double.parseDouble(s_price);
                    prev_balance = Double.parseDouble(s_prev_balance);
                    balance = Double.parseDouble(s_balance);
                    prev_bottles = Long.parseLong(s_prev_bottles);
                    bottles = Long.parseLong(s_bottles);

                    Client client = new Client(id, name, address, locality, bonus, price,
                            prev_balance, balance, prev_bottles, bottles, update_date, sync_date);

                    clientDataSource.insertClient(client);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);

        }

    }
Aparicio answered 28/9, 2013 at 3:15 Comment(1)
It says Network Unreachable, But im testing with 3 phones, and it just doesnt work on the Samsung FAME (4.1.2)Aparicio
A
63

I've figured out what was the problem! The Samsung Fame wasn't connected to the Wi-Fi. It had no internet.

Aparicio answered 28/9, 2013 at 3:23 Comment(7)
it happens :) (to me just now ;))Gilli
I did the same thing... My router was hard reset a month ago and I never reauthenticated my tablet...Chase
Thanks , you saved me :)Lyon
That's so silly, but seems like many of us developers ironically forget to even check out emulator's internet connection!!Escalera
Want to break my head.. not checked this at allCantonese
God, this is my third time!Caskey
This is why I love StackOverflow that much!!Spot
C
9

You can also add a check for internet connection before making any request so that user will get to know internet is not there.

Use below code and if it return false show Toast/Alert.

private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Concision answered 28/9, 2013 at 4:37 Comment(2)
In case anyone else has trouble with this, note that you need to add android.permission.ACCESS_NETWORK_STATE as a permission in your manifestMchale
note that this case will have NO effect if there are no WI-FI but cellular data (3G, 4G, EDGE) activated and not in range, or traffic limit is over!!! The solution is to develop this check adding a kind of pingOnly
J
1

Have a case when my app is connecting then turn off wifi > app crash and it cannot go inside catch command Exception.

Jumper answered 20/2, 2014 at 9:55 Comment(0)
L
1

please check Internet/WiFi connection on the device

Lohman answered 22/10, 2018 at 8:12 Comment(0)
A
0

Happend to me when my PC was connected via VPN so endpoint is accessible, while my phone is not. Connect you phone to VPN or use Reverse Tethering so your phone connects via your PC - see https://github.com/Genymobile/gnirehtet

Apparition answered 30/10, 2023 at 7:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.