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