2013-10-02 13 views
13

Dưới đây là mã hoạt động của tôi. Trong này tôi đang sử dụng các thư viện hỗ trợ appcompatNgoại lệ con trỏ Null trong việc sử dụng nhà cung cấp dịch vụ chia sẻ thư viện hỗ trợ

import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v4.view.MenuItemCompat; 
    import android.support.v7.app.ActionBarActivity; 
    import android.support.v7.widget.ShareActionProvider; 
    import android.view.Menu; 
    import android.view.MenuItem; 

    public class MainActivity extends ActionBarActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    MenuItem item = (MenuItem) menu.findItem(R.id.share_options); 
    ShareActionProvider shareAction = (ShareActionProvider) MenuItemCompat 
      .getActionProvider(item); 
    Intent shareIntent = new Intent(Intent.ACTION_SEND) 
      .setAction(Intent.ACTION_SEND) 
      .putExtra(Intent.EXTRA_TEXT, "MobiTexter") 
      .setType("text/plain"); 
    shareAction.setShareIntent(shareIntent); 
    return super.onCreateOptionsMenu(menu); 
} 

}

Sau đây là tập tin XML của tôi cho các tùy chọn menu đó là một ShareActionProvider Widget

 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:mobitexter="http://schemas.android.com/apk/res-auto" > 

<item 
    android:id="@+id/share_options" 
    android:actionProviderClass="android.support.v7.widget.ShareActionProvider" 
    android:orderInCategory="100" 
    mobitexter:showAsAction="never" 
    mobitexter:title="@string/share_options"/> 

    </menu> 

Trong này tôi đang nhận được một NullPointerException . Dưới đây là đầu ra mèo đăng nhập của tôi.

  10-02 12:49:00.813: E/AndroidRuntime(9227): FATAL EXCEPTION: main 
      10-02 12:49:00.813: E/AndroidRuntime(9227): java.lang.NullPointerException 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at net.mobitexter.easyshare.MainActivity.onCreateOptionsMenu(MainActivity.java:31) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.app.Activity.onCreatePanelMenu(Activity.java:2444) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu(ActionBarActivityDelegateICS.java:141) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.support.v7.app.ActionBarActivity.onCreatePanelMenu(ActionBarActivity.java:199) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onCreatePanelMenu(ActionBarActivityDelegateICS.java:280) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:392) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:743) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2838) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.os.Handler.handleCallback(Handler.java:605) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.os.Handler.dispatchMessage(Handler.java:92) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.os.Looper.loop(Looper.java:137) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at android.app.ActivityThread.main(ActivityThread.java:4448) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at java.lang.reflect.Method.invokeNative(Native Method) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at java.lang.reflect.Method.invoke(Method.java:511) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
      10-02 12:49:00.813: E/AndroidRuntime(9227): at dalvik.system.NativeStart.main(Native Method) 
+0

Những dòng là 'MainActivity.java: 31'? – ssantos

+0

'shareAction.setShareIntent (shareIntent);' –

+0

bạn có chắc chắn rằng thư viện hỗ trợ đang được đưa vào bản dựng không? – MikeIsrael

Trả lời

29

Tôi đã tìm thấy lỗi. Vấn đề là thư viện hỗ trợ yêu cầu phải có tiền tố tùy chỉnh chứ không phải android:actionProviderClass. Những gì tôi đã làm sai mà tôi sử dụng android:actionProviderClass thay vì customprefix:actionProviderClass

Xem ở đây: https://developer.android.com/training/basics/actionbar/adding-buttons.html

+0

Điều này sẽ giải quyết được NPE, nhưng nó vẫn sẽ không tạo ra công việc chia sẻ hành động. Làm thế nào bạn giải quyết được vấn đề "getActionProvider: item không thực hiện SupportMenuItem" như trong http://stackoverflow.com/questions/24219842/getactionprovider-item-does-not-implement-supportmenuitem – faizal

+0

kiểm tra các điểm trả lời này: http: //stackoverflow.com/a/26080597/1112177 –

2

Nếu dòng này

shareAction.setShareIntent(shareIntent); 

là ném một NullPointerException, câu này

(ShareActionProvider) MenuItemCompat.getActionProvider(item); 

phải trở về null.

Hãy xem bài đăng bên dưới, nói về lý do tại sao điều này xảy ra.

NullPointerException on setShareIntent using ActionBarSherlock

+0

Tôi không sử dụng actionbarsherlock –

+0

Vâng đôi khi tiêu đề của câu hỏi là gây hiểu lầm, nhưng vấn đề là bạn có thể không thiết lập đúng thuộc tính' android: actionProviderClass' cho mục của bạn 'share_options' – ssantos

+0

dòng được sử dụng trong' android: actionProviderClass' được sao chép từ những gì được cung cấp trong [link] developer.android.com/guide/ui/actionbar –

0

tôi đã thay đổi này

android:actionProviderClass=widget.ShareActionProvider" /> 

Để này

app:actionProviderClass=support.v7.widget.ShareActionProvider" /> 
Các vấn đề liên quan