Matcher-Klasse findet match nicht

MARJAVA

Aktives Mitglied
Hallo zusammen, nach einigem Rumprobieren und API durchlesen komme ich noch nicht ans Ziel. Ich habe folgenden String:
HTML:
<!DOCTYPE html>
<html dir="ltr" lang="de">
<head>
    <meta charset="utf-8" />
    <link rel="dns-prefetch" href="//flags.fmcdn.net" />

    <meta name="robots" content="all, follow" />
    <meta name="author" content="www.fireflymedia.cz" />
    <meta name="description" content="Deutschland — flagge, download, hauptstadt, bevölkerung, gesamtfläche, unabhängigkeit, höchster punkt, währung, BIP." />
    <meta name="keywords" content="flagge, land" />

    <title>Deutschland | Flaggen der Länder</title>

    <meta property="og:title" content="Deutschland | Flaggen der Länder" />
    <meta property="og:description" content="Flaggen aller Länder" />
    <meta property="og:image" content="http://www.welt-flaggen.de/data/flags/normal/de.png" />
    <meta property="og:url" content="http://www.welt-flaggen.de/deutschland" />

    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <link rel="canonical" href="http://www.welt-flaggen.de/deutschland" />
    <link rel="shortcut icon" href="//flags.fmcdn.net/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="//flags.fmcdn.net/style/css-ed8db08fccc5.css?1489679280" />
   

    <!--[if lt IE 9]>
    <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
   
    <!--[if lte IE 6]>
    <link rel="stylesheet" type="text/css" href="/style/css-37f751f624ed-fix-ie6.css?1455663600" />
    <![endif]-->

    <script type="text/javascript" src="http://ff.kis.v2.scr.kaspersky-labs.com/81280E59-F044-C340-9890-4441E8225560/main.js" charset="UTF-8"></script></head>

und habe nun einen Matcher angelegt. Doch er findet den Match in meinem String nicht.
Java:
try {
            stateResult=downloadTask.execute("http://www.welt-flaggen.de/"+state).get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        Log.i("stateResult",stateResult);


        Pattern p=Pattern.compile("<meta property=\"og:image\" content=\"(.?)\" />");
        Matcher m=p.matcher(stateResult);
        [COLOR=#ff0000]String stateCode=m.group(1);[/COLOR]

In der rot markierten Zeile passiert der Fehler mit folgender Exception
Java:
     Caused by: java.lang.IllegalStateException: No successful match so far
        at java.util.regex.Matcher.ensureMatch(Matcher.java:1101)
        at java.util.regex.Matcher.group(Matcher.java:369)
        at de.markusc.worldstates.MainActivity.downloadImage2(MainActivity.java:44)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Sieht jemand den Fehler der im Code steckt?
 
Nicht getestet aber versuchs mal mit (.*?) anstatt (.?)

BTW: Vielleicht solltest du lieber eine Library verwenden, die für das Parsen von HTML geeignet ist (zB JSoup)
 
Bin jetzt auf eine Bibliothek zum Parsen von HTML umgestiegen.
Java:
    public void getPath(View view){

        editText=findViewById(R.id.editText);
        String state=editText.getText().toString();

        Document document;
        String bitmapFilePath="";
        try {

            //document= Jsoup.connect("http://www.welt-flaggen.de/deutschland").get();

            document = Jsoup.connect("http://eclipse.org").get();
            bitmapFilePath = document.title();
            //bitmapFilePath= document.select("meta[property=og:image]").first().attr("content");
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.i("bitmapFilePath",bitmapFilePath);

        ImageDownloader task = new ImageDownloader();
        Bitmap myBitmap;
        try {
            myBitmap=task.execute("http://www.welt-flaggen.de/data/flags/small/de.png").get();
            imageView=findViewById(R.id.imageView);
            imageView.setImageBitmap(myBitmap);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
Bei einem einfachen Testlauf, dem Auslesen des Titels der Internetseite von Eclipse erhalte ich ebenfalls eine Fehlermeldung.
Hier dazu mal meine Fehlermeldung. Anfangs vielleicht vergessen zu erwähnen, dass ich mit Android Studio arbeite.
Java:
2018-10-16 11:44:42.137 6119-6119/de.markusc.worldstates E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.markusc.worldstates, PID: 6119
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
        at java.net.InetAddress.getAllByName(InetAddress.java:787)
        at com.android.okhttp.Dns$1.lookup(Dns.java:39)
        at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
        at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
        at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
        at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:652)
        at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:629)
        at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:261)
        at org.jsoup.helper.HttpConnection.get(HttpConnection.java:250)
        at de.markusc.worldstates.MainActivity.getPath(MainActivity.java:42)

Etwas weiter unten lade ich ein Bild von der Internetseite, wenn ich die Zeile "document = Jsoup.connect("http://eclipse.org").get();" ausblende funktioniert die ganze Methode einwandfrei, sobald ich die Zeile einblende, gibt er mir den Fehler aus.
 

Neue Themen


Zurück
Oben