【问题标题】:Android app - share intent fatal errorAndroid 应用程序 - 共享意图致命错误
【发布时间】:2014-07-27 12:06:42
【问题描述】:
07-27 11:29:26.390: E/AndroidRuntime(691): FATAL EXCEPTION: main
07-27 11:29:26.390: E/AndroidRuntime(691): java.lang.NullPointerException
07-27 11:29:26.390: E/AndroidRuntime(691):  at com.androidma.voteq.MainActivity.onCreateOptionsMenu(MainActivity.java:271)
07-27 11:29:26.390: E/AndroidRuntime(691):  at android.app.Activity.onCreatePanelMenu(Activity.java:2444)
07-27 11:29:26.390: E/AndroidRuntime(691):  at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:225)
07-27 11:29:26.390: E/AndroidRuntime(691):  at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:233)
07-27 11:29:26.390: E/AndroidRuntime(691):  at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:146)
07-27 11:29:26.390: E/AndroidRuntime(691):  at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:200)
07-27 11:29:26.390: E/AndroidRuntime(691):  at     android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu    (ActionBarActivityDelegateICS.java:293)
07-27 11:29:26.390: E/AndroidRuntime(691):  at  com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:388)

当我尝试在操作栏上插入“分享”操作时,我的应用程序崩溃了。

有问题的行是这个

    myShareActionProvider.setShareIntent(myIntent);

这个类在我的导入中:

import android.support.v7.app.ActionBarActivity;

我的主要活动课程是这样开始的:

public class MainActivity extends ActionBarActivity {

我的代码:

public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        getMenuInflater().inflate(R.menu.action_bar_share_menu, menu);

        MenuItem item = menu.findItem(R.id.menu_item_share);



        ShareActionProvider myShareActionProvider = (ShareActionProvider) item.getActionProvider();



        Intent myIntent = new Intent();
        startActivity(myIntent);

        myIntent.setAction(Intent.ACTION_SEND);

        myIntent.putExtra(Intent.EXTRA_TEXT, "Oylamaya Katil! Google vs. Apple! https://play.google.com/store/apps/details?id=com.google.android.gm&hl=tr");

        myIntent.setType("text/plain");



        myShareActionProvider.setShareIntent(myIntent);

    return true;



}       

菜单文件夹中的main.xml

<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>

action manu share munu xml

<?xml version="1.0" encoding="utf-8"?>

<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>

当我使用共享意图代码块时,它将在另一个项目上运行。 我几个小时都无法解决这个问题......

这解决了我的问题:

    private ShareActionProvider mShareActionProvider;
    public boolean onCreateOptionsMenu( Menu menu) {


        getMenuInflater().inflate(R.menu.action_bar_share_menu, menu);

        final MenuItem shareItem = menu.findItem(R.id.action_share);

        mShareActionProvider = (ShareActionProvider)       MenuItemCompat.getActionProvider(shareItem);



        Intent myIntent = new Intent();

        myIntent.setAction(Intent.ACTION_SEND);

        myIntent.putExtra(Intent.EXTRA_TEXT, "Oylamaya Katil! Google vs. Apple!     https://play.google.com/store/apps/details?id=com.google.android.gm&hl=tr");

        myIntent.setType("text/plain");



        mShareActionProvider.setShareIntent(myIntent);







        return true;



    }

【问题讨论】:

    标签: android eclipse android-intent share


    【解决方案1】:

    您的一半代码正在使用 AppCompat 操作栏向后移植。您的一半代码使用本机 API Level 11+ 操作栏实现。这行不通。选择一个并坚持下去。

    引用the documentation:

    本指南重点介绍如何使用支持库的操作栏,但如果您的应用仅支持 Android 3.0 或更高版本,则应使用框架中的 ActionBar API。大多数 API 是相同的——但位于不同的包命名空间中——除了以下部分中提到的方法名称或签名之外。

    【讨论】:

    • 谢谢,我会努力的。
    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多