代码之家  ›  专栏  ›  技术社区  ›  Lior Iluz

android:savebookmark活动

  •  0
  • Lior Iluz  · 技术社区  · 14 年前

    我正在尝试启动savebookmark活动,由于一些未知的原因强制关闭。 它说它是空的,但是应该是空的,因为“title”和“url”是可选的(另外,我尝试用字符串数据替换空值,得到相同的强制关闭)。

    下面是按钮侦听器:

    Button addBookBtn = (Button) findViewById(R.id.add_bookmark);
            addBookBtn.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    saveBookmark(context, null, null);
                }
            });
    

    下面是savebookmark方法:

    public static final void saveBookmark(Context c, String title, String url) {
            Intent i = new Intent(Intent.ACTION_INSERT, android.provider.Browser.BOOKMARKS_URI);
            i.putExtra("title", title);
            i.putExtra("url", url);
            c.startActivity(i);
        }
    

    这是单击“添加”按钮时出现的致命错误:

    E/AndroidRuntime(17252): FATAL EXCEPTION: main
    E/AndroidRuntime(17252): java.lang.NullPointerException
    E/AndroidRuntime(17252):        at com.droidil.droidmarks.Dmarks.saveBookmark(Dm
    arks.java:81)
    E/AndroidRuntime(17252):        at com.droidil.droidmarks.Dmarks$2.onClick(Dmark
    s.java:71)
    E/AndroidRuntime(17252):        at android.view.View.performClick(View.java:2408
    )
    E/AndroidRuntime(17252):        at android.view.View$PerformClick.run(View.java:
    8818)
    E/AndroidRuntime(17252):        at android.os.Handler.handleCallback(Handler.jav
    a:587)
    E/AndroidRuntime(17252):        at android.os.Handler.dispatchMessage(Handler.ja
    va:92)
    E/AndroidRuntime(17252):        at android.os.Looper.loop(Looper.java:123)
    E/AndroidRuntime(17252):        at android.app.ActivityThread.main(ActivityThrea
    d.java:4627)
    E/AndroidRuntime(17252):        at java.lang.reflect.Method.invokeNative(Native
    Method)
    E/AndroidRuntime(17252):        at java.lang.reflect.Method.invoke(Method.java:5
    21)
    E/AndroidRuntime(17252):        at com.android.internal.os.ZygoteInit$MethodAndA
    rgsCaller.run(ZygoteInit.java:868)
    E/AndroidRuntime(17252):        at com.android.internal.os.ZygoteInit.main(Zygot
    eInit.java:626)
    E/AndroidRuntime(17252):        at dalvik.system.NativeStart.main(Native Method)
    

    感谢你的帮助!

    3 回复  |  直到 14 年前
        1
  •  1
  •   xil3    14 年前

    您可以做一些称为重载的事情——如果您有可选参数,这是最有效的。

    public static final void saveBookmark(Context c) {
      Intent i = new Intent(Intent.ACTION_INSERT, android.provider.Browser.BOOKMARKS_URI);
      c.startActivity(i);
    }
    
    public static final void saveBookmark(Context c, String title, String url) {
      Intent i = new Intent(Intent.ACTION_INSERT, android.provider.Browser.BOOKMARKS_URI);
      i.putExtra("title", title);
      i.putExtra("url", url);
      c.startActivity(i);
    }
    

    我们在这里定义了2次方法,使用不同的参数排列——Java足够聪明,可以根据您所给的参数知道使用哪种方法。这只是一个例子,说明如何使用重载来完成您想要的工作。

        2
  •  0
  •   gatnowurry    14 年前

    你放了一个 <action android:name="android.intent.action.ACTION_INSERT" /> 清单中活动的条目? 否则,上下文是空的,但是如果扩展listactivity,就没有理由这样做。

        3
  •  0
  •   McStretch    14 年前

    从意向API条目:

    public Intent putExtra(String name, Bundle value)
    

    向意图添加扩展数据。这个 名称 必须包含一个包 前缀 例如,应用程序 com.android.contacts网站 将使用以下名称 “com.android.contacts.showall” .

    在putextra()调用中不包括包前缀,例如:

    i.putExtra("yourpackage.title", title);

    我认为我们需要更多的信息来完全诊断您的异常,但这可能是一个问题。