2016-06-01 10 views
1

Connect an Android Device To a Web Service on Local HostVerbindung Refused für Android Geräte-Web Service SYMFONY 3

meines vorherigen Thread Folgen, im nun in der Lage zu meinem Android-Gerät zu meinem lokalen Host-Verbindung über wamp

Aber noch kann ich nicht auf meinen symfony-Server verbinden und erhalten meine API Daten

sarted I symfony internen Server: "Server auf Lauf http://127.0.0.1:8000"

ich benutzte Internet Erlaubnis auf meinem AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> 

Mein MainActivity.java Code

package com.example.cbmedandroid; 
import java.io.IOException; 
import java.io.InputStream; 
import org.apache.http.HttpEntity; 
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 org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 
import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
public class MainActivity extends Activity implements OnClickListener { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     findViewById(R.id.my_button).setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View arg0) { 
     Button b = (Button)findViewById(R.id.my_button); 
     b.setClickable(false); 
     new LongRunningGetIO().execute(); 
    } 

    private class LongRunningGetIO extends AsyncTask <Void, Void, String> { 
     protected String getASCIIContentFromEntity(HttpEntity entity) throws IllegalStateException, IOException { 
      InputStream in = entity.getContent(); 
      StringBuffer out = new StringBuffer(); 
      int n = 1; 
      while (n>0) { 
       byte[] b = new byte[4096]; 
       n = in.read(b); 
       if (n>0) out.append(new String(b, 0, n)); 
      } 
      return out.toString(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpGet httpGet = new HttpGet("http://192.168.43.13:8000/api/horaire.json"); 
      String text = null; 
      try { 
       HttpResponse response = httpClient.execute(httpGet, localContext); 
       HttpEntity entity = response.getEntity(); 
       text = getASCIIContentFromEntity(entity); 
      } catch (Exception e) { 
       return e.getLocalizedMessage(); 
      } 
      return text; 
     } 

     protected void onPostExecute(String results) { 
      if (results!=null) { 
       EditText et = (EditText)findViewById(R.id.my_edit); 
       et.setText(results); 
      } 
      Button b = (Button)findViewById(R.id.my_button); 
      b.setClickable(true); 
     } 
    } 
} 

Wenn ich die Anwendung zu starten, und klicken Sie auf die Schaltfläche. Es während 40 Sekunden laden und ich bekomme diesen „Anschluss an http://192.168.43.13:8000 verweigert“

192.168.43.13 ist meine pc-Adresse

Was soll ich dieses Problem beheben zu tun. danke.

+0

Haben Sie einen anderen PC zu testen, ob Ihre Verbindung zu "http://192.168.43.13:8000" überhaupt funktioniert? –

+0

Nein, leider sollte es aber funktionieren Normalerweise rate ich, da ich mich über My Android Webnavigator mit meinem localhost verbinden kann. –

Antwort

2

ENDLICH! Ich habe die Lösung für mein Problem

gefunden, wenn der eingebaute PHP-Server läuft. Wir müssen mit diesem Befehl an

php bin/console server:run 0.0.0.0:8000 

(8000 ist mein Hafen, können Sie Ihr Put)

so dass jedes Gerät oder Host (ip)

zugreifen können, wenn Sie 127.0.0.1 setzen nur Ihre localhost wird

erlaubt sein, deshalb habe ich nicht die Api bekommen könnte sogar ich zu meinem localhost via wiFi-Hotspot verbunden war

Es ist jetzt in Ordnung

+1

Ich bin froh, dass es funktioniert hat! –

+1

Wenn Sie möchten, dass etwas extern zugänglich ist, müssen Sie INADDR_ANY (alle Nullen) oder die spezifische externe Schnittstelle statt der Loopback-Schnittstelle abhören. –

1

Können Sie diese cURL App for Android installieren?

Dann auf Ihrem Android verwendet (dies ist ein echtes Telefon oder ein Emulator) ein cURL Fenster öffnen und dann eingeben:

cURL http://192.168.43.13:8000/ 

ich diese gleiche Art von Einrichtung mit einem echten Android-Handy versucht, und die oben angegebenen cURL-App und in meine Symfony-Web-URL (auf einem anderen PC), und das Android zeigt die richtige HTML-Antwort zurück, die ich erwarte.

Zumindest wird dies Ihnen helfen, die Funktionalität zuerst zu überprüfen.

bearbeiten unterhalb dieser Linie:

Hier ist der Code, den Sie da Httpclient verwenden könnte war veraltet:

URL url = new URL("http://192.168.43.13:8000/api/horaire.json"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
//conn.setRequestMethod("GET"); 

// read the response 
System.out.println("Response Code: " + conn.getResponseCode()); 
InputStream in = new BufferedInputStream(conn.getInputStream()); 
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8"); 
System.out.println(response); 

Nicht sicher, ob Sie die „setRequestMethod“ verwenden müssen. Aber probieren Sie diese Änderung aus und sehen Sie, ob das für Sie funktioniert.

+0

Hallo, ich habe cURL heruntergeladen, aber infortunalety ich habe einen Fehler bei der Installation auf meinem Handy. Einige Leute sagen jedoch, dass das Problem mit der HTTP-Anfrage Verbindung ist, die in Android 5.1.1 veraltet ist und sie schlagen vor, HttpUrlConnection mit java.net.HttpUrl Connection zu verwenden. In der Tat ist meine Anfrage veraltet. Können Sie mir helfen, meinen Code mit dieser neuen http-Anfrage zu bearbeiten? Danke –

+1

Ist das in der 'doInBackground' Funktion? –

+1

Ich habe meine Antwort bearbeitet, um Code für den 'doInBackground'-Code einzuschließen, der" HttpClient "verwendet, der veraltet ist. –