我对android和java完全是新手如此赦免如果要求一些微不足道的东西。我有一个webview应用程序,只要有人从谷歌搜索或电子邮件中点击我的网站网址,就可以打开。我在AndroidManifest.xml中放了以下代码[Code 1]。这工作得很好。每当我在Android上点击我的网站的网址时,该应用程序就会打开。
问题是我无法从意图中获取网址并加载webview应用中的网址。例如,当用户单击链接www.mywebsite.com/contact时,它会打开应用程序并在webview元素中启动默认的www.mywebsite.com。发生这种情况是因为我尚未传递从intent收到的数据(url)并在webview中加载该url。
我有接收意图的代码并加载webview [代码2],但它无法正常工作。每次我使用意图打开应用程序时都会崩溃(通过点击谷歌搜索中的链接)。我不知道在MainActivity.java或其他文件中放置该代码的位置。这是一个很小的代码,请让我知道我做错了什么。
[代码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>
[代码1] ------------------------
[代码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);
}
[代码2] ------------------------
声明组合为&#39; String combine = null;&#39;在文件的开头。
我从StackOverflow本身得到了这个[Code 2]但是我没有得到我应该把它放在哪个文件中,在什么功能下。
这是Play Consol崩溃部分的错误日志。
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)
答案 0 :(得分:0)
您应该在MainActivity中的onCreate方法中放置(代码2)部分,因为您在清单的此部分中定义了句柄方案的intent-filter,因此您应该在MainActivity类的onCreate方法中编写(代码2)。
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);
}
您可以使用this link文档获取更多信息