UrlValidator

V

Varta012

Neues Mitglied
0
Hi,
ich möchte eine Pdf von einem Server in einem WebView anzeigen.
Allerdings wird diese Pdf regelmäßig durch eine andere ersetzt, welche dann die Endung _01 trägt.
z.B:
1. Pdf: example.pdf
2. Pdf: example_01.pdf

Jetzt habe ich versucht, mit dem UrlValidator und einer If-Abfrage zu prüfen, ob die erste Pdf vorhanden ist und wenn nicht, die zweite zu laden. Dabei stürtzt die App leider ab...

String Url1 = "http://www.example.de/uploads/media/10-12-13S.pdf";

String Url2 = "http://www.example.de/uploads/media/10-12-13S_01.pdf";




WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.setWebViewClient(new WebViewClient());
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

UrlValidator urlValidator = new UrlValidator();
if (urlValidator.isValid(Url1)) {
myWebView.loadUrl("http://docs.google.com/gview?embedded=true&url=" + Url1);
} else {
myWebView.loadUrl("http://docs.google.com/gview?embedded=true&url=" + Url2); }
 
Mit welcher Fehlermeldung stürzt die App ab?

Ausserdem welchen UrlValidator nutzt du?
Den von Apache Commons?
Der hilft dir in der Situation aber nicht, der prüft nur ob die URL an sich (also der Text der drin steht) eine valide URL ist.

isValid("http://DieseDomaingibtEsGarnicht.de/trotzdem/valid")

Das dürfte auch true ergeben, somit ist dein Ansatz falsch, da er dann immer die erste Url laden dürfte.
 
Ja genau, das ist der von Apache.

Eine Fehlermeldung bekomme ich nicht, sie stürtzt lediglich ab und "wurde beendet".

Welche anderen Möglichkeiten gibt es denn, um dieses Problem zu lösen?
Vielleicht stelle ich mich zu blöd an, aber bisher hat nichts funktioniert
 
Die Fehlermeldung müsste im CatLog stehen.

Dir bleibt nur die Möglichkeit die URL aufzurufen z.B. mit
HttpClient | Android Developers

Und dann im HTTPResponse den Responsecode zu prüfen.
Wenn das Dokument da ist sollte dieser "200 OK" sein wenn nicht dann "404 File not found"
 
Alles klar, danke :)

Das führt mich dann allerdings wieder dazu, dass ich es mit diesem
try/catch probieren muss. Damit komme ich allerdings nicht klar.
Ich weiß nicht, wo ich dann schreiben muss, was bei einer fehlerhaften Url passieren soll -.-
 
Naja moment, was verstehst du jetzt unter fehlerhafter URL?

Eine Url die inhaltlichfalsch ist, also wo gar keine URL drin steht
oder meinst du damit, wenn das Dokument nicht vorhanden ist?

Damit hat der try-catch-block erst mal gar nix zu tun.

Du holst dir einfach den HTTP Response und prüfst dann hier
(!!Achtung nur Pseudocode, das funktioniert nicht mit copy und paste!!)
Code:
try {
//Reponse holen
            if (reponse.getStatus() == 200) {
                url = url1;
                } else {
                    url = url2;
                }
}
catch (Exception e) {
url = url2; // wenn das schiefgeht funktioniert url1 nicht, kann aber auch andere ursachen haben}

myWebView.loadUrl("http://docs.google.com/gview?embedded=true&url=" +  Url2);
 
Hi,
Danke. Ich konnte die letzten Tage nicht weiter arbeiten, habe es aber gerade nochmal versucht. Ich bekomme keine Fehlermeldung mehr, aber wenn ich Debugge öffnet sich diese 'Debug perspective', es stimmt also immernoch etwas nicht.
Code:
WebView myWebView = (WebView) findViewById(R.id.webView1);
        myWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
    try {
        
         
        URL url = new URL("www.example.de");
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();

        int code = connection.getResponseCode();

        if (code == 200) {
            Url1 = Url2;
        
        } else {
        Url1 = Url1;
        }

        
    }
    
    catch(IOException e)
    {
        Url1 = Url2;
        
        myWebView.loadUrl("http://docs.google.com/gview?embedded=true&url=" +  Url2);
    }

Leider habe ich immernoch keine Ahnung, woran es jetzt liegt...


12-18 16:54:58.535: E/AndroidRuntime(30540): FATAL EXCEPTION: main
12-18 16:54:58.535: E/AndroidRuntime(30540): Process: com.example.vertretungsplan, PID: 30540
12-18 16:54:58.535: E/AndroidRuntime(30540): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.vertretungsplan/com.example.vertretungsplan.webActivity}: android.os.NetworkOnMainThreadException
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.ActivityThread.access$800(ActivityThread.java:135)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.os.Handler.dispatchMessage(Handler.java:102)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.os.Looper.loop(Looper.java:136)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.ActivityThread.main(ActivityThread.java:5017)
12-18 16:54:58.535: E/AndroidRuntime(30540): at java.lang.reflect.Method.invokeNative(Native Method)
12-18 16:54:58.535: E/AndroidRuntime(30540): at java.lang.reflect.Method.invoke(Method.java:515)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-18 16:54:58.535: E/AndroidRuntime(30540): at dalvik.system.NativeStart.main(Native Method)
12-18 16:54:58.535: E/AndroidRuntime(30540): Caused by: android.os.NetworkOnMainThreadException
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
12-18 16:54:58.535: E/AndroidRuntime(30540): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
12-18 16:54:58.535: E/AndroidRuntime(30540): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
12-18 16:54:58.535: E/AndroidRuntime(30540): at java.net.InetAddress.getAllByName(InetAddress.java:214)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)
12-18 16:54:58.535: E/AndroidRuntime(30540): at com.example.vertretungsplan.webActivity.onCreate(webActivity.java:68)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.Activity.performCreate(Activity.java:5231)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-18 16:54:58.535: E/AndroidRuntime(30540): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
12-18 16:54:58.535: E/AndroidRuntime(30540): ... 11 more
 
android.os.NetworkOnMainThreadException -> Du darfst keinen Netzwerk/Internet-Operation auf dem UI-Thread ausführen.
 
hm ok und wie löse ich das? :D
 
Zurück
Oben Unten