使用启动画面和进度条创建webview时,请在 MainActivity.java 中显示以下代码
package com.shopence.myapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ShareActionProvider;
public class MainActivity extends Activity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.activity_main_webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient());
mWebView.loadUrl("http://shopence.com/");
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminateVisibility(false);
}
@Override
public void onBackPressed() {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
private ShareActionProvider mShareActionProvider;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
/** Inflating the current activity's menu with res/menu/items.xml */
getMenuInflater().inflate(R.menu.menu_main, menu);
/** Getting the actionprovider associated with the menu item whose id is share */
mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.action_settings).getActionProvider();
/** Setting a share intent */
mShareActionProvider.setShareIntent(getDefaultShareIntent());
return super.onCreateOptionsMenu(menu);
}
/** Returns a share intent */
private Intent getDefaultShareIntent(){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "shopence.com");
intent.putExtra(Intent.EXTRA_TEXT,"Welcome To Shopence");
return intent;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
在具有代码
的activity_main.xml中<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/progressbar_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_marginBottom="161dp"
android:indeterminate="false"
android:max="500"
android:progress="0"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:text="Loading data..." />
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#8FBC8F" />
</LinearLayout>
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:cacheColorHint="@android:color/transparent"
android:divider="#00000000"
android:dividerHeight="0dp"
android:fadingEdge="none"
android:persistentDrawingCache="scrolling"
android:smoothScrollbar="false" >
</ListView>
<WebView
android:id="@+id/activity_main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</RelativeLayout>
运行应用后,它会在 logcat 中生成一条消息不幸的是我的应用已停止。但它显示的错误就像那样&amp;应用程序在模拟器中崩溃。
2690-2690/com.shopence.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.shopence.myapp, PID: 2690
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ShareActionProvider.setShareIntent(android.content.Intent)' on a null object reference
at com.shopence.myapp.MainActivity.onCreateOptionsMenu(MainActivity.java:58)
at android.app.Activity.onCreatePanelMenu(Activity.java:2846)
at com.android.internal.policy.PhoneWindow.preparePanel(PhoneWindow.java:567)
at com.android.internal.policy.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:939)
at com.android.internal.policy.PhoneWindow$1.run(PhoneWindow.java:271)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
答案 0 :(得分:0)
mShareActionProvider
未正确初始化。它是零,因此是NPE。
mShareActionProvider.setShareIntent(getDefaultShareIntent());
这是你得到NULL的行:纠正这个,这样你就可以正确获得shareActionProvider。
/** Getting the actionprovider associated with the menu item whose id is share */
mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.action_settings).getActionProvider();
在 Logcat 中运行该程序后显示错误,如
E/SysUtils: ApplicationContext is null in ApplicationStatus
01-04 11:32:28.599 1996-1996/com.shopence.myapp W/chromium: [WARNING:resource_bundle.cc(285)] locale_file_path.empty()
01-04 11:32:29.139 1996-1996/com.shopence.myapp E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
01-04 11:32:29.151 1996-1996/com.shopence.myapp E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
01-04 11:32:29.161 1996-1996/com.shopence.myapp E/chromium: [ERROR:gl_surface_egl.cc(327)] No suitable EGL configs found.
01-04 11:32:29.161 1996-1996/com.shopence.myapp E/chromium: [ERROR:gl_surface_android.cc(23)] GLSurfaceEGL::InitializeOneOff failed.
01-04 11:32:29.165 1996-1996/com.shopence.myapp E/chromium: [ERROR:browser_main_loop.cc(698)] GLSurface::InitializeOneOff failed
01-04 11:32:29.316 1996-1996/com.shopence.myapp E/DataReductionProxySettingListener: No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp
01-04 11:32:29.560 1996-2006/com.shopence.myapp W/art: Suspending all threads took: 8.744ms
01-04 11:32:29.578 1996-2151/com.shopence.myapp W/AudioManagerAndroid: Requires BLUETOOTH permission
01-04 11:32:29.902 1996-1996/com.shopence.myapp W/art: Attempt to remove non-JNI local reference, dumping thread
01-04 11:32:29.996 1996-1996/com.shopence.myapp W/AwContents: onDetachedFromWindow called when already detached. Ignoring
01-04 11:32:30.887 1996-2012/com.shopence.myapp I/art: Background sticky concurrent mark sweep GC freed 7248(504KB) AllocSpace objects, 4(100KB) LOS objects, 44% free, 2MB/3MB, paused 4.956ms total 226.065ms
01-04 11:32:30.895 1996-2012/com.shopence.myapp W/art: Suspending all threads took: 7.480ms
01-04 11:32:32.551 1996-2149/com.shopence.myapp W/chromium: [WARNING:data_reduction_proxy_config.cc(423)] SPDY proxy OFF at startup
01-04 11:32:32.987 1996-1996/com.shopence.myapp I/Choreographer: Skipped 33 frames! The application may be doing too much work on its main thread.
01-04 11:32:33.415 1996-1996/com.shopence.myapp I/Choreographer: Skipped 34 frames! The application may be doing too much work on its main thread.
01-04 11:32:36.872 1996-2006/com.shopence.myapp W/art: Suspending all threads took: 262.669ms
01-04 11:32:37.319 1996-1996/com.shopence.myapp I/Choreographer: Skipped 81 frames! The application may be doing too much work on its main thread.
01-04 11:32:37.670 1996-2200/com.shopence.myapp A/chromium: [FATAL:gl_surface_android.cc(58)] Check failed: kGLImplementationNone != GetGLImplementation() (0 vs. 0)
01-04 11:32:39.665 1996-1996/com.shopence.myapp I/Choreographer: Skipped 89 frames! The application may be doing too much work on its main thread.
01-04 11:32:39.924 1996-2200/com.shopence.myapp W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
01-04 11:32:39.924 1996-2200/com.shopence.myapp W/google-breakpad: Chrome build fingerprint:
01-04 11:32:39.924 1996-2200/com.shopence.myapp W/google-breakpad: 1.0
01-04 11:32:39.924 1996-2200/com.shopence.myapp W/google-breakpad: 1
01-04 11:32:39.924 1996-2200/com.shopence.myapp W/google-breakpad: 023f32a1-4862-425f-a49b-e5b1792614ed
01-04 11:32:39.924 1996-2200/com.shopence.myapp W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
01-04 11:32:39.925 1996-2200/com.shopence.myapp E/chromium: ### WebView Version 44.0.2403.119 (code 246011900)
01-04 11:32:39.927 1996-2200/com.shopence.myapp A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 2200 (GpuThread)
答案 1 :(得分:0)
您是否在R.menu.menu_main中添加 android:actionProviderClass ,如下所示
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_item_share"
android:showAsAction="ifRoom"
android:title="Share"
android:actionProviderClass=
"android.widget.ShareActionProvider" />
...
</menu>
然后在onCreateOptionsMenu
中使用此代码@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate menu resource file.
getMenuInflater().inflate(R.menu.share_menu, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.menu_item_share);
// Fetch and store ShareActionProvider
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
// Return true to display menu
/** Setting a share intent */
mShareActionProvider.setShareIntent(getDefaultShareIntent());
return true;
}