Noch ein Problem, Traffic not permittet

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Noch ein Problem, Traffic not permittet

    Nabend,

    zur Vorgeschichte einfach meinen anderen Thread anschauen :)

    Ich hab jetzt folgendes Tutorial probiert: draeger-it.blog/android-app-mi…ank-verbinden-16-01-2016/

    Leider hab ich folgendes Problem:

    Quellcode

    1. 07-15 22:22:26.785 14782-14802/com.mysqltest.osek.mysqltest W/System.err: java.io.IOException: Cleartext HTTP traffic to ***.*.***.*** not permitted
    Wenn ich allerdings über den Browser zugreif wird die richtige Ausgabe angezeigt. Muss ich noch irgendwelche Configs ändern?


    Hoffe jemand kann helfen :)
  • Hatte die letzten Tage wenig Zeit, also dry für die späte Antwort. Ich habs jetzt so gemacht, dass ich einfach in meinen Server ein eigenes Zertifikat eingebaut hab (sagt man das so? Ich kenn mich in dem Bereich wie gesagt echt noch nicht aus...) Also kann man jetzt auch per https darauf zugreifen.

    Der vorherige Fehler ist verschwunden, da ich allerdings kein offizielles Zertifikat nutze kommt wenn man sie jetzt aufruft immer diese Meldung "unsichere Verbindung" oder so, mich stört das nicht, Android allerdings schon

    Quellcode

    1. 07-25 09:36:31.089 11438-11438/? W/.osek.mysqltes: Unexpected CPU variant for X86 using defaults: x86
    2. 07-25 09:36:32.089 11438-11438/com.mysqltest.osek.mysqltest W/.osek.mysqltes: JIT profile information will not be recorded: profile file does not exits.
    3. 07-25 09:36:32.104 11438-11438/com.mysqltest.osek.mysqltest W/.osek.mysqltes: JIT profile information will not be recorded: profile file does not exits.
    4. 07-25 09:36:32.749 11438-11438/com.mysqltest.osek.mysqltest W/.osek.mysqltes: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
    5. 07-25 09:36:32.752 11438-11438/com.mysqltest.osek.mysqltest W/.osek.mysqltes: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
    6. 07-25 09:36:33.138 11438-11481/com.mysqltest.osek.mysqltest W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
    7. 07-25 09:36:35.567 11438-11484/com.mysqltest.osek.mysqltest W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    8. 07-25 09:36:35.572 11438-11484/com.mysqltest.osek.mysqltest W/System.err: at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:229)
    9. at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
    10. at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
    11. at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
    12. at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
    13. at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    14. at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    15. at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    16. at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    17. 07-25 09:36:35.573 11438-11484/com.mysqltest.osek.mysqltest W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
    18. at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
    19. at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
    20. at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
    21. at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:26)
    22. at com.mysqltest.osek.mysqltest.ActivityDataSource.openConnection(ActivityDataSource.java:53)
    23. at com.mysqltest.osek.mysqltest.ActivityDataSource.doInBackground(ActivityDataSource.java:28)
    24. at com.mysqltest.osek.mysqltest.ActivityDataSource.doInBackground(ActivityDataSource.java:13)
    25. at android.os.AsyncTask$2.call(AsyncTask.java:333)
    26. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    27. at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    28. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    29. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    30. at java.lang.Thread.run(Thread.java:764)
    31. 07-25 09:36:35.590 11438-11484/com.mysqltest.osek.mysqltest W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    32. at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:661)
    33. at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:539)
    34. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
    35. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:418)
    36. at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:339)
    37. at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
    38. at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
    39. at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:208)
    40. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:404)
    41. at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
    42. at com.android.org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:375)
    43. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:224)
    44. ... 22 more
    45. 07-25 09:36:35.591 11438-11484/com.mysqltest.osek.mysqltest W/System.err: Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    46. ... 34 more
    47. 07-25 09:37:03.458 11438-11490/com.mysqltest.osek.mysqltest W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    48. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:229)
    49. at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
    50. at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
    51. at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
    52. at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
    53. at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    54. at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    55. at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    56. at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    57. at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
    58. 07-25 09:37:03.459 11438-11490/com.mysqltest.osek.mysqltest W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
    59. at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
    60. at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
    61. at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:26)
    62. at com.mysqltest.osek.mysqltest.ActivityDataSource.openConnection(ActivityDataSource.java:53)
    63. at com.mysqltest.osek.mysqltest.ActivityDataSource.doInBackground(ActivityDataSource.java:28)
    64. at com.mysqltest.osek.mysqltest.ActivityDataSource.doInBackground(ActivityDataSource.java:13)
    65. at android.os.AsyncTask$2.call(AsyncTask.java:333)
    66. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    67. at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    68. 07-25 09:37:03.460 11438-11490/com.mysqltest.osek.mysqltest W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    69. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    70. at java.lang.Thread.run(Thread.java:764)
    71. 07-25 09:37:03.461 11438-11490/com.mysqltest.osek.mysqltest W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    72. at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:661)
    73. at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:539)
    74. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
    75. at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:418)
    76. at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:339)
    77. at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
    78. at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
    79. 07-25 09:37:03.462 11438-11490/com.mysqltest.osek.mysqltest W/System.err: at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:208)
    80. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:404)
    81. at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
    82. at com.android.org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:375)
    83. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:224)
    84. ... 22 more
    85. Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    86. ... 34 more
    Alles anzeigen
    Kann man Android da irgendwie austricksen oder so, oder muss ich mir jetzt auch noch n ssl Zertifikat kaufen? D:
  • Andy61 schrieb:

    Ich mach meine Aufrufe mit Http(s)URLConnection...
    Also mit HttpURLConnection kannst du Seiten auslesen ohne SSL Zertifikat.

    medium.com/@lewisjkl/android-h…ask-tutorial-7ce5bf0245cd
    Ich glaube ich habe das nach diesem Tutorial gemacht.

    Vielleicht hilft dir das weiter :)
    Hmmm ne, also im Prinzip ist das das gleiche was ich jetzt mach, hier mal mein Code:

    Java-Quellcode

    1. import android.os.AsyncTask;
    2. import android.widget.TextView;
    3. import java.io.BufferedReader;
    4. import java.io.IOException;
    5. import java.io.InputStreamReader;
    6. import java.io.OutputStreamWriter;
    7. import java.net.URL;
    8. import java.net.URLConnection;
    9. import java.net.URLEncoder;
    10. public class ActivityDataSource extends AsyncTask<String, Void, String> {
    11. public static final String AUTHKEY = "test321";
    12. public static final String POST_PARAM_KEYVALUE_SEPARATOR = "=";
    13. public static final String POST_PARAM_SEPARATOR = "&";
    14. private static final String DESTINATION_METHOD = "allEntrys";
    15. private TextView textView;
    16. private URLConnection conn;
    17. public ActivityDataSource(TextView textView) {
    18. this.textView = textView;
    19. }
    20. @Override
    21. protected String doInBackground(String... params) {
    22. try {
    23. openConnection();
    24. return readResult();
    25. } catch (IOException e) {
    26. e.printStackTrace();
    27. }
    28. return null;
    29. }
    30. /**
    31. * Öffnet eine Verbindung {@link URLConnection}.
    32. * @throws IOException
    33. */
    34. private void openConnection() throws IOException{
    35. //StringBuffer für das zusammensetzen der URL
    36. StringBuffer dataBuffer = new StringBuffer();
    37. dataBuffer.append(URLEncoder.encode("authkey", "UTF-8"));
    38. dataBuffer.append(POST_PARAM_KEYVALUE_SEPARATOR);
    39. dataBuffer.append(URLEncoder.encode(AUTHKEY, "UTF-8"));
    40. dataBuffer.append(POST_PARAM_SEPARATOR);
    41. dataBuffer.append(URLEncoder.encode("method", "UTF-8"));
    42. dataBuffer.append(POST_PARAM_KEYVALUE_SEPARATOR);
    43. dataBuffer.append(URLEncoder.encode(DESTINATION_METHOD, "UTF-8"));
    44. //Adresse der PHP Schnittstelle für die Verbindung zur MySQL Datenbank
    45. URL url = new URL("https://128.0.120.135/reader.php");
    46. conn = url.openConnection();
    47. conn.setDoOutput(true);
    48. OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    49. wr.write(dataBuffer.toString());
    50. wr.flush();
    51. }
    52. /**
    53. * Ließt das Ergebnis aus der geöffneten Verbindung.
    54. * @return liefert ein String mit dem gelesenen Werten.
    55. * @throws IOException
    56. */
    57. private String readResult()throws IOException{
    58. String result = null;
    59. //Lesen der Rückgabewerte vom Server
    60. BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    61. StringBuilder sb = new StringBuilder();
    62. String line = null;
    63. //Solange Daten bereitstehen werden diese gelesen.
    64. while ((line = reader.readLine()) != null) {
    65. sb.append(line);
    66. }
    67. return sb.toString();
    68. }
    69. @Override
    70. protected void onPostExecute(String result) {
    71. if(!isBlank(result)) {
    72. //String[] arr = result.split("\\|");
    73. this.textView.setText("3");
    74. }
    75. }
    76. private boolean isBlank(String value){
    77. return value == null || value.trim().isEmpty();
    78. }
    79. }
    Alles anzeigen
    Bzw. ich habs jetzt auch mal mit dem HttpUrlRequest probiert, zwar nicht mit deinem Tutorial, das hat leider nicht geklappt. Aber da bekomm ich, wenn ich http benutze den "CleartextTraffic not allowed" Fehler, und wenn ich https benutze das Ding mit "Trust anchor for certification path not found." :(

    Muss ich vielleicht am Server was ändern? Ich habe dieses Tutorial benutzt: legacy.thomas-leister.de/apach…erbindungen-ermoeglichen/
  • Hallo eine Frage zu dem Thema
    Ist das dein eigener Server auf dem die MySql DB läuft ?

    Mal noch eine Frage wo baust du deine HttpURLConnection auf?
    Du hast nur eine normal UrlConnection und keine Http oder Https.

    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

    urlConnection.setRequestMethod("POST");
    finde ich auch nicht in deinem Code.



    habe auch mal versucht auf die Adresse vom Browser aus zuzugreifen.

    Mit https kommt eine Fehlermeldung wegen fehlenden Zertifikates.

    Nur http bekomme ich einen Json Sting zurück.

    [{"id":"1","name":"bob","age":"18"},{"id":"2","name":"kevin","age":"19"},{"id":"3","name":"Mr. Osek","age":"18"},{"id":"1","name":"Mr. Osek","age":"18"},{"id":"2","name":"Kevin","age":"19"}]

    Wenn du Https haben willst brauchst du auch ein Zertifikart.

    Client Server Kommunikation https mit Zertifikaten

    Ps. halte dich mal wirklich an den link von Andy61

    Zuerst muss aber immer ein Http Get erfolgen kein Post sory.
    Mit dem Browser schickst du immer ein Get wenn du eine Seite anforderst.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von jogimuc ()

  • Naja, OkHttp ist zwar für mich deutlich übersichtlicher und gefällt mir auch direkt besser :D (danke dafür) aber mein Problem löst es nicht, erstmal hier mein Code:

    Quellcode

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. setContentView(R.layout.activity_main);
    5. final TextView textView = findViewById(R.id.textView);
    6. OkHttpClient okHttpClient = new OkHttpClient.Builder()
    7. .connectionSpecs(Arrays.asList(
    8. ConnectionSpec.MODERN_TLS,
    9. ConnectionSpec.CLEARTEXT,
    10. ConnectionSpec.COMPATIBLE_TLS))
    11. .build();
    12. String url = "http://***.*.***.***/reader.php";
    13. Request request = new Request.Builder().url(url).build();
    14. okHttpClient.newCall(request).enqueue(new Callback() {
    15. @Override
    16. public void onFailure(Call call, IOException e) {
    17. e.printStackTrace();
    18. }
    19. @Override
    20. public void onResponse(Call call, Response response) throws IOException {
    21. if(response.isSuccessful()) {
    22. final String myResponse = response.body().string();
    23. MainActivity.this.runOnUiThread(new Runnable() {
    24. @Override
    25. public void run() {
    26. textView.setText(myResponse);
    27. }
    28. });
    29. }
    30. }
    31. });
    32. }
    Alles anzeigen


    So, wenn ich auf die ip über den Browser gehe funktioniert alles, die App spuckt mir allerdings wieder folgenden Warn aus:


    Quellcode

    1. 07-27 11:31:36.478 16925-16945/com.mysqltest.osek.mysqltest W/System.err: java.net.UnknownServiceException: CLEARTEXT communication to ***.*.***.*** not permitted by network security policy
    2. at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:146)
    3. at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257)
    4. at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
    5. at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
    6. at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
    7. at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    8. at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    9. 07-27 11:31:36.479 16925-16945/com.mysqltest.osek.mysqltest W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
    10. at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    11. at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    12. at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    13. 07-27 11:31:36.484 16925-16945/com.mysqltest.osek.mysqltest W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    14. at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
    15. at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    16. 07-27 11:31:36.485 16925-16945/com.mysqltest.osek.mysqltest W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    17. at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
    18. at okhttp3.RealCall$AsyncCall.execute(RealCall.java:147)
    19. at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
    20. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    21. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    22. at java.lang.Thread.run(Thread.java:764)
    23. 07-27 11:31:36.503 16925-16946/com.mysqltest.osek.mysqltest W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
    Alles anzeigen
    Wieder der Cleartextscheiß ._.
    Ich hab schon z.B. mit "https://google.com/" probiert, da ging einwandfrei... bei "http://google.com/" bekomm ich den gleichen Fehler, aber wenn ich meine Website auf https umstelle hab ich ja wieder das, dass der mein Zertifikat nicht akzeptiert und ich will mir garantiert keins kaufen nur um Daten aus ner Datenbank abzurufen...
    Ich bin ja jetzt nicht gerade der Androidprofi, aber es kann doch nicht so schwer sein paar Daten aus ner Datenbank lesen/schreiben zu können, v.a. das klappt ja im Prinzip alles, nur sobald ich das dann in ne App packen will macht mir Android Probleme, kann ich den Cleartexttraffic nicht irgendwie erlauben?
  • Hi für mich sieht dein Code total verdreht aus.
    Hast dich nicht an die beispiele in meinen Link gehalten.
    zoftino.com/android-okhttp-example

    Neben bei gesagt sind das keine Fehler sondern nur warnungen.



    wenn du mit Https arbeiten willst brachst du definitiv ein zertifikat auf deinem server. Wenn es ein gekauftes von einer ofizellen stelle ist, wir Android es auch ohne Probleme Anerkennen. Bei einem selbst erstellte musst du das dem User mitgeben damit er es installieren kann oder schaue dir das Thema „Client Server Kommunikation https mit Zertifikaten“ an.


    Zu deinem Code.
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectionSpecs(Arrays.asList(
    ConnectionSpec.MODERN_TLS,
    ConnectionSpec.CLEARTEXT,
    ConnectionSpec.COMPATIBLE_TLS))
    .build();
    Ist irgentwie nicht richtig . entspricht auch nicht den üblichen Beispielen.
    Die Variable "okHttpClient" bekommt somit auch keine Instznz auf OkHttpClient()



    So erstellt man keinen Bulider.
    Dem Client wird kein Bulider übergeben. Mach das einzeln.

    Habe das Gefühl das du dich mal mit dem http Protokoll auseinandersetzen solltest. Da nutzen dir die besten libs nichts wenn du nicht weißt wann du was brauchst zb was ein get oder ein post Aufruf ist usw. Das war auch das Problem in deiner ersten Version.

    Wir gesagt kann ich vom Browser auf deinen Server mit http zugreifen IP steht ja im Quellcode. Was da für ein string kommt habe ich schon gepostet. Ist der richtig?

    Dieser Code entsricht dem was du mit deinem Browser machst. einfach ein Get.
    mit call back methode Async

    Quellcode

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. setContentView(R.layout.activity_main);
    5. final TextView textView = findViewById(R.id.textView);
    6. OkHttpClient okHttpClient = new OkHttpClient();
    7. String url = "http://***.*.***.***/reader.php";
    8. Request request = new Request.Builder()
    9. .url(url)
    10. .build();
    11. okHttpClient.newCall(request).enqueue(new Callback() {
    12. @Override
    13. public void onFailure(Call call, IOException e) {
    14. e.printStackTrace();
    15. }
    16. @Override
    17. public void onResponse(Call call, Response response) throws IOException {
    18. if(response.isSuccessful()) {
    19. final String myResponse = response.body().string();
    20. MainActivity.this.runOnUiThread(new Runnable() {
    21. @Override
    22. public void run() {
    23. textView.setText(myResponse);
    24. }
    25. });
    26. }
    27. }
    28. });
    29. }
    Alles anzeigen


    Auserdem gibt es auch scheinbar Probleme beim aufruf des TextView aus der MainActivity bin mir nicht sicher ob das in der runOnUiThread mit der textView Variablen so past . Ich würde die Global deffiniren und nicht in der onCrate und schon gar nicht final. da kannste sie auch nicht mehr ändern. Mach die Global im Klassenrupf.

    Das geht mit sichrheit schief.i
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Tut mir leid, ich probier seit Wochen einfach nur noch verschiedenste Sachen aus, daher sieht der Code so durcheinander aus. Das aus deinem Link hab ich ausprobiert.

    Der String der da kommt stimmt.

    Die Permission im Manifest hab ich gesetzt:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="com.mysqltest.osek.mysqltest">
    4. <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    5. <application
    6. android:allowBackup="true"
    7. android:icon="@mipmap/ic_launcher"
    8. android:label="@string/app_name"
    9. android:roundIcon="@mipmap/ic_launcher_round"
    10. android:supportsRtl="true"
    11. android:theme="@style/AppTheme">
    12. <activity android:name=".MainActivity">
    13. <intent-filter>
    14. <action android:name="android.intent.action.MAIN" />
    15. <category android:name="android.intent.category.LAUNCHER" />
    16. </intent-filter>
    17. </activity>
    18. </application>
    19. </manifest>
    Alles anzeigen
    Muss ich sonst noch was machen? Was genau meinst du mit "und zur Laufzeit"?
  • Ja die Premission Internet im Manifest solte reichen da Internet nicht zu den Dangerous Permissions gehört.
    Somit brauchst du zur laufzeit keine setzen abfragen.

    Zum Thema Cleartexttraffic. Eigentlich erkennt OkHttp an der Url ob es http oder Https mit SSL Verschlüsselung ist. Da du kein Zertifikat hast kannst du nur http machen . Arber mit den


    OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectionSpecs(Arrays.asList(
    ConnectionSpec.MODERN_TLS,
    ConnectionSpec.CLEARTEXT,
    ConnectionSpec.COMPATIBLE_TLS))
    .build();


    Weist du Okhttp an es codiert zu schicken.
    "das ist auch nicht aus den Beispiel Link"


    OkHttpClient okHttpClient = new OkHttpClient();.
    Sollte reichen und er macht das selber wenn er auf eine Https Seite Kommt Natürlich nur bestätigte Zertifikate .
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Was kommt denn für ein Fehler? Wir sprechen estmal nur von http://
    Hast du auch das mit dem Text View geändert denn das wird auch nicht gehen?
    wenn du es dir im debugger ansiehst, kommt in der onResponse Methode was an?

    Die Asyncone Geschichte brauchst du auch nicht denn OkHttp läuft in einen eigenen Thread.

    nimm mal den einfachen Code

    Quellcode

    1. public Object getHttpResponse() {
    2. OkHttpClient httpClient = new OkHttpClient();
    3. String url = "http://www.zoftino.com/api/storeOffers";
    4. Request request = new Request.Builder()
    5. .url(url)
    6. .build();
    7. Response response = null;
    8. try {
    9. response = httpClient.newCall(request).execute();
    10. return response.body().string();
    11. } catch (IOException e) {
    12. Log.e(TAG, "error in getting response get request okhttp");
    13. }
    14. return null;
    15. }
    Alles anzeigen
    Du solltest auch bedenken das das Beispiel als Rückgabe Wert vo einer HTML Webseite susgeht und du nur den body Teil abfragst den du wohl Gar nicht hast.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Ähhm okay

    Quellcode

    1. android:usesCleartextTraffic="true"
    Das hat gelöst :D Ich dachte zwar dass ich das schonmal probiert hätte, aber naja. Das mit der Rückgabe funktioniert auch alles einwandfrei jetzt, ich werd auf jeden Fall auch nochmal die einfache Methode probieren, aber die andere funktioniert jetzt auch ganz in Ordnung für mich, danke für deine Geduld und Hilfe jogimuc :)