2017-11-05 3 views
1

Ich bin völlig neu zu Android und Java so entschuldigen Sie, wenn Sie etwas triviales fragen. Ich habe eine Webview-App, die sich öffnet, wenn jemand auf meine Website-URL von Google-Suche oder von E-Mail klickt. Ich habe folgenden Code [Code 1] in AndroidManifest.xml eingefügt. Das funktioniert wirklich gut. Immer wenn ich auf Android auf meine Website klicke, öffnet sich die App.Wie URL in android Webview laden von absichtlich abgefangen?

Problem ist, ich bin nicht in der Lage, die URL von der Absicht zu bekommen und laden Sie das in der Webview App. Wenn ein Benutzer beispielsweise auf einen Link www.mywebsite.com/contact klickt, öffnet er die App und startet die Standard-Website www.mywebsite.com im webview-Element. Dies geschieht, weil ich die von intent empfangenen Daten (URL) noch nicht übergeben habe und diese URL in der Webansicht lade.

Ich habe den Code, um die Absicht zu erhalten und Webview laden [Code 2], aber es funktioniert nicht. Die App stürzte jedes Mal ab, wenn ich die App mit Absicht öffne (indem ich auf den Link von der Google-Suche klicke). Ich weiß nicht, wo ich diesen Code einfügen soll, egal ob in MainActivity.java oder in einer anderen Datei. Es ist ein kleiner Code, bitte lass mich wissen, was ich falsch mache.

[Code 1] ----------------------

<activity 
    android:name=".activity.MainActivity" 
    android:label="@string/app_name" 
    android:launchMode="standard" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 

    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:scheme="http" 
     android:host="www.mywebsite.com" 
     android:pathPrefix="/"/> 
    </intent-filter> 

</activity> 

[Code 1] --------- ---------------

[Code 2] ------------------------

if(getIntent().getData()!=null) 
{ 
Uri data = getIntent().getData(); 
String scheme = data.getScheme(); 
String fullPath = data.getEncodedSchemeSpecificPart(); 

combine = scheme+"://"+fullPath; 
} 

String url = null; 
if(combine!=null) 
{ 
url = combine; 
webview.loadUrl(url); 
} 

[Code 2] ------------------------

erklärt kombinieren als 'String kombinieren = null;' am Anfang der Datei.

Ich habe dies [Code 2] von StackOverflow selbst, aber ich bekomme nicht, wo soll ich das, in welcher Datei, unter welcher Funktion.

Dies ist das Fehlerprotokoll von Play Consol Crash-Abschnitt.

java.lang.RuntimeException: 
    at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2659) 
    at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2724) 
    at android.app.ActivityThread.-wrap12 (ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1473) 
    at android.os.Handler.dispatchMessage (Handler.java:102) 
    at android.os.Looper.loop (Looper.java:154) 
    at android.app.ActivityThread.main (ActivityThread.java:6123) 
    at java.lang.reflect.Method.invoke (Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:867) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:757) 

Caused by: java.lang.NullPointerException: 
    at com.mytemplates.webviewapp.activity.MainActivity.onCreate (MainActivity.java:94) 
    at android.app.Activity.performCreate (Activity.java:6672) 
    at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1140) 
    at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2612) 
+1

Zeigen Sie Ihre logcat verwenden, wenn die Anwendung abstürzt –

+0

Das, was ich weiß nicht, wo soll ich die getIntent setzen [Code 2]. Ich habe versucht, es unter @Override öffentlichen void onStart() oder öffentlichen void onCreate (Bundle savedInstanceState) in MainActivity.java aber nicht funktioniert. Kannst du mir bitte helfen zu verstehen, wo der Code hingehen soll? – AAK

+0

Das würde in onCreate gehen, posten Sie Ihr Crash-Log für uns besser zu verstehen –

Antwort

0

sollten Sie (Code 2) Abschnitt in onCreate Methode in Ihrer MainActivity setzen, weil Ihre Intent-Filter für Griffschema in diesem Abschnitt Ihres Manifests definiert, so dass Sie (Code 2) in onCreate Methode schreiben sollen Ihre MainActivity-Klasse.

 WebView webview = (WebView) findViewById(R.id.WebView); 
    webview.getSettings().setJavaScriptEnabled(true); 

    Intent intent=getIntent(); 
    String action = intent.getAction(); 

    if (Intent.ACTION_VIEW.equals(action) && (intent.getData() != null)) 
    { 
    Uri data = intent.getData(); 
    String scheme = data.getScheme(); 
    String fullPath = data.getEncodedSchemeSpecificPart(); 
    combine = scheme+"://"+fullPath; 
    } 

String url = null; 
if(combine!=null) 
{ 
url = combine; 
webview.loadUrl(url); 
} 

können Sie this link Dokument für weitere Informationen

+0

Ich habe versucht Code und setzen Sie unter OnCreate-Methode. Die App stürzt immer noch ab. Die Absturzprotokolldatei von Play Consol ist in Frage enthalten. – AAK

+0

@AAK Ich aktualisiere die Antwort bitte nochmals überprüfen. –

+0

Ich habe diesen Code auch versucht, das Problem scheint bei webview.loadUrl (url); Linie. Wenn ich diese Zeile verlasse, schlägt die App nicht fehl, funktioniert aber auch nicht. Öffnet die Standard-Startseite. – AAK

Verwandte Themen