Android:NPE 在尝试使用 ACTION_APPWIDGET_PICK 意图进行 activityForResult 时

Posted

技术标签:

【中文标题】Android:NPE 在尝试使用 ACTION_APPWIDGET_PICK 意图进行 activityForResult 时【英文标题】:Android:NPE while trying to activityForResult with ACTION_APPWIDGET_PICK intent 【发布时间】:2010-12-07 03:13:54 【问题描述】:

我遇到了一个问题,然后尝试使用AppWidgetManager.ACTION_APPWIDGET_PICK 设置意图,从日志中可以看出,android AppWidget 生态系统内部存在问题。 那我做错了吗? 请参阅下面的示例代码和堆栈跟踪

public class NPEDemoActivity extends Activity 

    private final static int HOST_CODE = 1024;

    private AppWidgetHost host;
    private AppWidgetManager manager;
    private int PICK_WIDGET_RC = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.main);
        host = new AppWidgetHost(this, HOST_CODE);
        host.startListening();
        manager = AppWidgetManager.getInstance(this);
        Button b = (Button)findViewById(R.id.Button01);
        b.setOnClickListener(new View.OnClickListener() 

            @Override
            public void onClick(View v) 
                int nextId = host.allocateAppWidgetId();
                Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);             
                pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, nextId);
                startActivityForResult(pickIntent, PICK_WIDGET_RC);   
            
        );
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
    

来自日志猫的堆栈跟踪:

10-15 17:33:06.873: ERROR/AndroidRuntime(821): java.lang.RuntimeException: Unable to start activity ComponentInfocom.android.settings/com.android.settings.AppWidgetPickActivity: java.lang.NullPointerException
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.os.Looper.loop(Looper.java:123)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.ActivityThread.main(ActivityThread.java:4203)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at java.lang.reflect.Method.invokeNative(Native Method)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at java.lang.reflect.Method.invoke(Method.java:521)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at dalvik.system.NativeStart.main(Native Method)
10-15 17:33:06.873: ERROR/AndroidRuntime(821): Caused by: java.lang.NullPointerException
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.settings.AppWidgetPickActivity.putAppWidgetItems(AppWidgetPickActivity.java:170)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.settings.AppWidgetPickActivity.putCustomAppWidgets(AppWidgetPickActivity.java:132)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.settings.AppWidgetPickActivity.getItems(AppWidgetPickActivity.java:208)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.settings.ActivityPicker.onCreate(ActivityPicker.java:99)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at com.android.settings.AppWidgetPickActivity.onCreate(AppWidgetPickActivity.java:63)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
10-15 17:33:06.873: ERROR/AndroidRuntime(821):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)

另一个小问题,com.android.settings 存在于哪个android 项目中? (我被窗户困住了,所以很遗憾不能使用回购) 帮助真的很感激。

【问题讨论】:

【参考方案1】:

看起来像 android 设置中的错误,如果您尝试选择 appwidget 而不指定任何额外的小部件,您将失败,请在 google 代码 link 处填写问题

【讨论】:

【参考方案2】:

编辑:说得太快了,没看出是 ViewListener 方法。不知道这是否仍然需要。

原答案

你应该在你的覆盖中调用 Acitivy 的 onClick

来自 Android docs:“任何活动生命周期方法的实现都应始终首先调用超类版本

希望能解决问题。

【讨论】:

Nope 看起来像 Android 中的错误,请参阅下面的答案【参考方案3】:

您确定解决方法了吗?我已经看到实现 appwidget 选择器以在其活动中运行 appwidget 主机的应用程序,我现在收到这个确切的错误,指出 EXTRA_CUSTOM_INFO 不存在。我正在测试启动器源代码使用的一些东西,如果我至少可以解决该错误,我会报告。

【讨论】:

现在我刚刚创建了额外的小部件,它可以工作了。 (它适用于启动器应用程序,因为搜索小部件并不是真正的应用小部件)。如果您希望他们在某个时候修复它,请投票支持谷歌代码中的错误

以上是关于Android:NPE 在尝试使用 ACTION_APPWIDGET_PICK 意图进行 activityForResult 时的主要内容,如果未能解决你的问题,请参考以下文章

尝试提交查询时 Android TV SearchFragment 崩溃(NPE)

使用_binding!!当我在联网后使用绑定时会产生 NPE

在物理设备中调试 android 应用程序时的 NPE

EnterTransitionCoordinator 在 Android 5.0 中导致 NPE

Android Oreo 字体系列 NPE 崩溃

ViewGroup dispatchAttachedToWindow中的Android内部NPE