Feste IP Adresse im WebView anzeigen/lasen

  • Antworten:16
  • Bentwortet
Georg C.
  • Forum-Beiträge: 235

29.09.2014, 09:40:06 via Website

Hallo,
und jetzt ich brauche wieder eure Hilfe. Versuche es kurz wie möglich.

Möchte einfach NUR! eine Webseite öffnen. Dafür mache ich von dem WebView gebrauch.
Damit es alles korrekt angezeigt wird, soll das WebView mit dem WebViewClient verbunden werden, und alles -> klar! - in einem .... am besten AsyncTask "laufen". OK!
Bei einem "Standard- Format", - wenn ich also eine Internetseite im Format:
http:// www.irgend_eine_seite. de (http:// www.irgend_eine_seite. com .... )
also -> http: // www..... lade,
wird alles korrekt auf dem Handy angezeigt.

Ich habe auf einem »Embedded Gerät« (Raspberry Pi) einen "abgespeckten" Apache2 Webserver "laufen". Das Gerät hat seine eigener IP, und es befinden sich dort mehrere Webseiten, PHP- Scripte ... usw.
Das Gerät (denen seiner Inhalte) werden wie gewöhnlich im Net mit der IP- Adresse "angesprochen". (in der Form):
http: // 192.169.xxx/my_test1. html

Mein Problem:
task.execute(new String[] {"http: // 192.168. ......"}); wird auf dem Handy NICHT angezeigt

Etwas verwirrend ist für mich, dass:
1) bei task.execute(new String[] { "http: // www. ...." }); wird auf dem Handy alles angezeigt

2) Von (aus) einem Rechner / Computer (in der Browser) funktioniert alles,
also auch -> task.execute(new String[] {"http: // 192.168. ......"});

3) Bei (aus) der Eclipse AVD Emulator funktioniert auch alles,
also auch -> task.execute(new String[] {"http: // 192.168. ......"});

Meine Vermutung:
RFC2616 ... Unix ... -> to Android API.

Hier das Code:

public class Main_WebViewClient extends Activity {

    WebView web;
    MyWebClient myWebClient;

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

        // START
        LoadWebPageASYNC task = new LoadWebPageASYNC();
        // task.execute(new String[] { "http: // www.  xxxxxx .de" });

        // http://192.xxxxxxx/test1.html
        task.execute(new String[] {"http://192 xxxxxxx/test1.html"}); 

    }

    private class LoadWebPageASYNC extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {

            web = (WebView) findViewById(R.id.webView1);
            // MyWebClient, implementiert alle Standard Methoden 
            // kann deshalb auch auskommentiert werden!
            web.setWebViewClient(new MyWebClient()); // <<<<-- keine Auswirkung auf / bei meinem Problem.
            web.getSettings().setJavaScriptEnabled(true);
            web.loadUrl(params[0]);
            // System.out.println(params[0]);
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
        }

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }

}

Nun selber habe keine Ahnung woran es "liegen" könnte?
Bitte deshalb um Hilfe dabei.

LG
Georg

— geändert am 29.09.2014, 09:59:19

Sorry für Gramatik & Stilistik Fehler.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

29.09.2014, 10:21:40 via App

Gehts es jetzt um die Öffentliche IP oder die vom DHCP zugewiesene? Wenn es die öffentliche ist musst du den port freischalten sowie im Apache die Berechtigung von aussen zugreifen erlauben.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.09.2014, 16:48:19 via Website

Hallo Georg,
ich verstehe aber nicht, warum du überhaupt ein AsyncTask benutzt.
Dies ist nur für direkte Kommunikation mit dem Netzwerk notwendig, aber nicht für die WebView.
Zudem hat die WebView in ihrem Code eigenen Asynchrone Methoden.
Zudem darfst du nie in der doInBackground des AsyncTasks Ui Elemente (wie die WebView) suchen bzw. ändern, da das in Android nur aus dem UI Thread erlaubt ist.

Vereinfacht könntest du das so machen:

 //   (Alles in die onCreate ohne Async task, da dieser un&ouml;tig ist)
    String deineURL = "http://109.193.193.35"; //Deine ip;hier aktuelle IP von google :)
      web = (WebView) findViewById(R.id.webView1);
                // MyWebClient, implementiert alle Standard Methoden 
                // kann deshalb auch auskommentiert werden!
                web.setWebViewClient(new MyWebClient()); // <<<<-- hier k&ouml;ntest du noch auf ladefehler reagieren etc.
                web.getSettings().setJavaScriptEnabled(true);
                web.loadUrl(deineURL);

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

29.09.2014, 20:17:30 via Website

Hallo,
erstmal Danke für die Antworten!

... musst du den port freischalten sowie im Apache die Berechtigung
von aussen zugreifen erlauben.

@Ludy
Selbstverständlich. Schließlich ....... sehe unten;

Dies ist nur für direkte Kommunikation mit dem Netzwerk notwendig,
aber nicht für die WebView. Zudem hat die WebView in ihrem Code
eigenen Asynchrone Methoden. Zudem darfst du nie in der
doInBackground des AsyncTasks Ui Elemente (wie die WebView) suchen
bzw. ändern, da das in Android nur aus dem UI Thread erlaubt ist.

@ Pascal P.
Danke für die Infos!
Weil ich einfach NUR! eine Webseite auf dem Handy "öffnen" / Anzeigen möchte habe ich so wie du Vorgeschlagen hast vorgegangen. Das -> "packen" in den AsyncTasks habe ich nur aus Verzweiflung gemacht.

Wenn ich die Inet- Seite meines Gerätes -> also http: //192.xxxxxxx/test1.html in egal welcher Browser (am PC!) eingebe, funktioniert alles 1A

Wenn ich so wie der Pascal es vorgeschlagen mache (habe am Anfang EXAKT! auch so gemacht) kann ich x- beliebige Seite öffnen (probiert google, meine eigene, pc-welt .... usw.)
jedoch NICHT! die http ://192.xxxxxxx/test1.html
Ich betone!
Die http: // 192.xxxxxxx/test1.html Seite kann ich am PC wie auch aus meinem AVD von Eclipse ansprechen, wenn ich die App auf meinem Handy installiere, geht es mit der http :// 192.xxxxxxx/test1.html nicht.
Die "normale" aber schon.
Ich werde PFFERÜÜÜCKT--S!

LG
Georg

— geändert am 29.09.2014, 20:18:07

Sorry für Gramatik & Stilistik Fehler.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.09.2014, 20:19:51 via Website

Hst du die Internet Permission in der Manifest gesetzt?

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

30.09.2014, 09:55:57 via Website

Hi,
@Pascal
ohne die Internet Permission in der Manifest geht es mit Internet gar nichts ... also klar -> ja.

@Ludy
thia - wenn ich mich gut erinnere, steht das in der Apache- Doku. Habe auch gelesen ...
Ja, -> das habe ich auch schon probiert. War NIX!

Wollte es etwas (sehr unschön!!!) Austricksen, in dem ich eine "http: //www" Seite (was eigentlich funktioniert) in der loadUrl(....) Methode aufrufe, und auf der Seite! - also im Header der Seite mir eine Umleitung auf die
http :// 192.xxxxxxx/test1.html Seite einbaue.
Leider auch das funktionierte (wieder mit JS noch mit ... PHP) nicht.
Mit meinem "Latein" bin ich am ENDE - Habe keinen ( wie ihr so sagt ) Plan mehr!

Was ich noch nicht versucht habe, ist / wird ein explizites Parsing der http :// 192.xxxxxxx/test1.html Seite -> also mit Bufferer- Reder ... usw.
Nun erstmal - ( wie ihr so sagt ) - ?chillen. Brauche ne Pause.

Trotzdem Danke!!!

LG
Georg

Ps.
Sollte es aber jemand noch eine Idee / Tipp haben - BITTE!

Sorry für Gramatik & Stilistik Fehler.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

30.09.2014, 10:48:09 via Website

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class WebApp extends Activity {

    WebView webView;
    Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webapp);
    webView = (WebView) findViewById(R.id.webView1);
    webView.setWebViewClient(webViewClient);
    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            webView.loadUrl("http://192.168.2.107");
        }
    });
}

WebViewClient webViewClient = new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url); // wenn das hier fehlt kommt der Fehler zustande als einpflegen ob das auch dein Fehler ist.
        return true;         // wenn das hier fehlt kommt der Fehler zustande als einpflegen ob das auch dein Fehler ist.
    }

};
}

So ich habe es mal selber durch getestet und hatte den Fehler auch reproduzieren können

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Georg C.
  • Forum-Beiträge: 235

30.09.2014, 11:18:12 via Website

So ich habe es mal selber durch getestet und hatte den Fehler auch
reproduzieren können

Vielen Dank Ludy!
also ich gehe (wie eigentlich vermutet) davon aus - ein Bug.
Nach der ?API 11 - (Net Restriktionen) hat jemand es ? .....vergessen .... ?

Danke

Sorry für Gramatik & Stilistik Fehler.

Antworten
Georg C.
  • Forum-Beiträge: 235

30.09.2014, 11:39:01 via Website

Nein!
es hat nicht gekklappt.

bearbeitet:
hast du (wie gelesen) selber den Fehler reproduzieren können.
Also Nein - es funzt nicht.

— geändert am 30.09.2014, 11:42:15

Sorry für Gramatik & Stilistik Fehler.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

30.09.2014, 11:45:32 via Website

Ich habe es dann mit

 @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url); // wenn das hier fehlt kommt der Fehler zustande als einpflegen ob das auch dein Fehler ist.
    return true;         // wenn das hier fehlt kommt der Fehler zustande als einpflegen ob das auch dein Fehler ist.
}

behoben.

Aber wenn es immer noch nicht bei dir funktionier bin ich langsam ratlos, das klingt jetzt nur nach - im falschen Netzwerk

Edit:

Zeig mal bitte dein "MyWebClient()"

— geändert am 30.09.2014, 12:21:49

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

30.09.2014, 13:26:08 via App

Oder du nimmst deinen WebView client erstmal ganz raus wenn du diesen nicht brauchst

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

01.10.2014, 09:46:27 via Website

Hallo, so
ENTSCHULDIGUNG!!!
Mein Fehler war, dass ich das "Ding" wie Apache2 konfiguriert habe, aber bei der abgespeckte Version geht es etwas anderes, bzw. meinem Router habe ich falsche Ports freigegeben. Intern hat es alles funktioniert weil es ...... vernetzt war. Von "außen" - NO!
Sorry!
Ludy - DUUUU bist GUTTTTT! - es lag summa summarum am Netzwerk!
Vielen vielen Dank an euch allen.

LG
Georg

Ps.
ach so -> jetzt Funktioniert alles, und mir langsam bewusst ist, warum mein Chef mich immer Kaffe holen lässt, und die Arbeit den Jungs überlässt! - (laughing) Danke.

Sorry für Gramatik & Stilistik Fehler.

Antworten
Georg C.
  • Forum-Beiträge: 235

01.10.2014, 10:46:58 via Website

Ja das stimmt! (silly)
Ok.
Eins noch irritiert mich aber. Wollte es eigentlich nicht ansprechen, aber es lässt mir keine ruhe!
Solltest du nicht antworten - kein Problem! Ich frage nur aus pure Neugier.

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url); // wenn das hier fehlt kommt der Fehler zustande als einpflegen ob das auch dein Fehler ist.
    return true;         // wenn das hier fehlt kommt der Fehler zustande als einpflegen ob das auch dein Fehler ist.
}

return true; // wenn das hier fehlt

Eine boolean Methode muss immer! einen Rückgabenwert haben / besitzen.
Das Schlüsselwort return, ermittelt den Wert der Rückgabe.
Dass alles ist dir sicherlich bekannt. Warum benutzt du nicht die Programmierspezifische begriffe?

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

01.10.2014, 12:03:52 via Website

Das hatte ich garnicht gesehen das ich das Doppelt drin hatte sorry für den Qutasch. Ist logisch nen return zu machen sonst gibt es ja mecker von Eclipse. :D

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten