HttpHostConnectException: połączenie odmówiło Androida

Próbuję połączyć się przez HttpPost i wysłać nazwę użytkownika i hasło do strony internetowej, a następnie otrzymać ciąg z tej strony. Próbowałem różnych metod, które działały dla mnie w przeszłości, ale teraz, gdy wysyłam identyfikatory użytkownika i hasła, aplikacja wygasa na 4 minuty, a następnie wypuszcza następujący wyjątek:

 07-16 16:32:32.897: W/System.err(632): Unable to connect to the server
    07-16 16:32:32.907: W/System.err(632): org.apache.http.conn.HttpHostConnectException: Connection to http://devdashboard.company refused
    07-16 16:32:32.917: W/System.err(632):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
    07-16 16:32:32.917: W/System.err(632):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    07-16 16:32:32.917: W/System.err(632):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    07-16 16:32:32.917: W/System.err(632):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    07-16 16:32:32.917: W/System.err(632):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    07-16 16:32:32.917: W/System.err(632):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    07-16 16:32:32.927: W/System.err(632):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    07-16 16:32:32.927: W/System.err(632):  at company.android.dashboard.app.HttpHelperAndroid.sendToHttp(HttpHelperAndroid.java:66)
    07-16 16:32:32.927: W/System.err(632):  at company.android.dashboard.app.DashboardAppActivity.goToDashboard(DashboardAppActivity.java:62)
    07-16 16:32:32.927: W/System.err(632):  at java.lang.reflect.Method.invokeNative(Native Method)
    07-16 16:32:32.937: W/System.err(632):  at java.lang.reflect.Method.invoke(Method.java:511)
    07-16 16:32:32.937: W/System.err(632):  at android.view.View$1.onClick(View.java:3039)
    07-16 16:32:32.947: W/System.err(632):  at android.view.View.performClick(View.java:3511)
    07-16 16:32:32.947: W/System.err(632):  at android.view.View$PerformClick.run(View.java:14105)
    07-16 16:32:32.947: W/System.err(632):  at android.os.Handler.handleCallback(Handler.java:605)
    07-16 16:32:32.957: W/System.err(632):  at android.os.Handler.dispatchMessage(Handler.java:92)
    07-16 16:32:32.957: W/System.err(632):  at android.os.Looper.loop(Looper.java:137)
    07-16 16:32:32.967: W/System.err(632):  at android.app.ActivityThread.main(ActivityThread.java:4424)
    07-16 16:32:32.977: W/System.err(632):  at java.lang.reflect.Method.invokeNative(Native Method)
    07-16 16:32:32.977: W/System.err(632):  at java.lang.reflect.Method.invoke(Method.java:511)
    07-16 16:32:32.977: W/System.err(632):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    07-16 16:32:32.987: W/System.err(632):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    07-16 16:32:32.987: W/System.err(632):  at dalvik.system.NativeStart.main(Native Method)
    07-16 16:32:32.987: W/System.err(632): Caused by: java.net.ConnectException: failed to connect to /50.19.240.232 (port 80): connect failed: ETIMEDOUT (Connection timed out)
    07-16 16:32:32.997: W/System.err(632):  at libcore.io.IoBridge.connect(IoBridge.java:114)
    07-16 16:32:32.997: W/System.err(632):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    07-16 16:32:32.997: W/System.err(632):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
    07-16 16:32:33.007: W/System.err(632):  at java.net.Socket.connect(Socket.java:842)
    07-16 16:32:33.007: W/System.err(632):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
    07-16 16:32:33.017: W/System.err(632):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
    07-16 16:32:33.017: W/System.err(632):  ... 22 more
    07-16 16:32:33.027: W/System.err(632): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
    07-16 16:32:33.047: W/System.err(632):  at libcore.io.Posix.connect(Native Method)
    07-16 16:32:33.047: W/System.err(632):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
    07-16 16:32:33.047: W/System.err(632):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
    07-16 16:32:33.057: W/System.err(632):  at libcore.io.IoBridge.connect(IoBridge.java:112)
    07-1
    6 16:32:33.057: W/System.err(632):  ... 27 more

Uprawnienie do Internetu jest włączone w moim pliku manifestu XML

Moja obecna implementacja wygląda następująco:

  String LOGIN = "[email protected]";
        String PASSWORD ="password1";

        //JSONObject to send the username and pw
        JSONObject json = new JSONObject();
        //put the path in the JSONArray object

        JSONArray vect = new JSONArray();
        vect.put("company Android Library");
        vect.put("Rocket Ship");

        int duration = 50;
        try {
            json.put("email", LOGIN);
            json.put("password", PASSWORD);
            json.put("json", "true");


        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Log.d(TAG, "ABOUT TO SEND:" + json.toString());

        JSONObject inJson = HttpHelperAndroid.sendToHttp(json, "http://devdashboard.company/login");

        if(inJson != null)
        {
            Log.d(TAG, "RECIEVED the JSON:" + inJson.toString());
        }
        else
            Log.d(TAG, "THE RESPONSE WAS NULL");
    }

A klasa HttpHelperAndroid wygląda tak:

     public class HttpHelperAndroid
    {
        private static final String TAG = "HttpHelperAndroid";//TAG for the LogCat(debugging)


    private static boolean responseSuccessful = true;

    /**
     * sends the JSONObject parameter to the desired URL parameter and gets the response
     * 
     * @param url the URL to which the JSONObject should be sent
     * @param jsonObjOut the JSONObject that is to be sent
     * @return the response from the server as a JSONObject
     */
    public static JSONObject sendToHttp(JSONObject jsonObjOut, String url) {
        responseSuccessful = true;
        try
        {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpRequest = new HttpPost(url);

            //convert the JSONObject to a string
            StringEntity se;

            //set our StringEntity to the JSONObject as a string
            se = new StringEntity(jsonObjOut.toString());

            // Set HTTP params
            httpRequest.setEntity(se);
            httpRequest.setHeader("Accept", "application/json");
            httpRequest.setHeader("Content-type", "application/json");
            httpRequest.setHeader("Accept-Encoding", "gzip"); //for gzip compression

            //get the current time
            long oldTime = System.currentTimeMillis();

            HttpResponse response = null;
            try
            {
                //execute the http request and get the response
                response = (HttpResponse) httpClient.execute(httpRequest);
            }
            catch(HttpHostConnectException e)
            {
                System.err.println("Unable to connect to the server");
                e.printStackTrace();
                responseSuccessful = false;
            }

            //only continue executing if we got a response from the server
            if(responseSuccessful)
            {
                //print how long the response took to the LogCat if it's on

                    Log.i(TAG, "HTTPResponse received in [" + (System.currentTimeMillis()-oldTime) + "ms]");


                // Get hold of the response entity (-> the data):
                HttpEntity entity = response.getEntity();

                if (entity != null) {
                    // Read the content stream
                    InputStream in = entity.getContent();
                    Header contentEncoding = response.getFirstHeader("Content-Encoding");
                    if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
                        in = new GZIPInputStream(in);
                    }

                    // convert content stream to a String
                    String resultString= streamToString(in);

                    //close the stream
                    in.close();

                    // convert the String into a JSONObject
                    JSONObject jsonObjRecv = new JSONObject(resultString);

                    //take a peak at the JSONObject we got back if the LogCat is on

                        Log.i(TAG,"<JSONObject>\n"+jsonObjRecv.toString()+"\n</JSONObject>");

                    //return the JSONObject we got back from the server
                    return jsonObjRecv;
                } 
            }
        }
        //catch any exception that was thrown
        catch (Exception e)
        {
            //Print the exception
            e.printStackTrace();
        }

        return null;
    }

    private static String streamToString(InputStream is)
    {
        //create a new BufferedReader for the input stream
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        //create a new StringBuilder to append the lines
        StringBuilder sb = new StringBuilder();

        //initialize an empty string
        String line = null;

        try
        {
            //iterate as long as there is still lines to be read
            while ((line = reader.readLine()) != null) 
            {
                //append the line and a newline character to our StringBuilder
                sb.append(line + "\n");
            }
        }
        //catch an IOException and print it
        catch (IOException e) {
            e.printStackTrace();
        } 
        //close the stream when we're done
        finally 
        {
            try 
            {
                is.close();
            } 
            //catch and print an exception if it's thrown
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
        //return the stream converted to a string
        return sb.toString();
    }
}

A oto mój XML dla kopnięć:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="company.android.dashboard.app"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/company_android_ico"
        android:label="@string/app_name" >
        <activity
            android:name=".DashboardAppActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Użyłem klasy HttpHelper w poprzednich projektach i to zadziałało dla mnie, dodatkowo próbowałem zaimplementować to za pomocą nameValuePairs:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);  
        nameValuePairs.add(new BasicNameValuePair("email", "[email protected]"));  
        nameValuePairs.add(new BasicNameValuePair("password", "password1"));
        nameValuePairs.add(new BasicNameValuePair("json", "true"));  
        try {
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

Dało to taki sam rezultat.

Czy to może być jakoś certyfikat? a może coś z uszkodzonym plikiem XML (próbowałem przerobić projekt i plik xml)Odrzucono połączenie z Androidem HTTP A może problem z plikami hostów na Androida?

Jestem otwarty na wszelkie sugestie!

Zbadałem to z wielu punktów widzenia i cieszę się, że mogę podać wszelkie inne informacje, które byłyby pomocne! Naprawdę doceniam twój czas!

UWAGA: Adres URL jest fałszywym adresem URL, a nie rzeczywistym, z którym się łączę, ze względów bezpieczeństwa. Jestem w stanie zwijać rzeczywistą stronę internetową z wiersza poleceń z parametrami i działa i mogę również logować się normalnie z przeglądarki internetowej.

EDYTOWAĆ Zidentyfikowałem problem! Ale niestety nie rozwiązanie. Problem polega na tym, że używam adresu URL serwera dev, który nie ma wpisu domeny na globalnym serwerze DNS. Aby to naprawić, muszę jakoś edytować plik hosts na moim urządzeniu z Androidem / w emulatorze ... czy ktoś wie, jak można to zrobić legalnie?

questionAnswers(5)

yourAnswerToTheQuestion