包含链接的EditText在三星设备上崩溃

10

这段代码在其他设备上运行得非常好,但在三星设备上崩溃。我似乎无法真正弄清楚为什么,但我知道如果我使用TextView它就不会崩溃。问题是,我需要一个EditText来输入内容,而且它可以包含多个链接。我已经花了过去一天的时间寻找解决方案,但没有成功,所以我想在这里发布:

注意:我测试的Nexus和Motorola设备似乎可以正常工作:
是否有某些解决方法我错过了?我猜测三星修改了如何处理EditText框中的链接?

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
      EditText t3 = (EditText) findViewById(R.id.text3);
      t3.setText(
              Html.fromHtml(
                      "<b>text3:</b>  Text with a " +
                              "<a href=\"http://www.google.com\">link</a> " +
                              "created in the Java source code using HTML."));
      t3.setMovementMethod(LinkMovementMethod.getInstance());

}

@Override
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);
    return true;
}

}

如果有帮助的话,这是堆栈跟踪:

    03-21 11:17:34.897: E/AndroidRuntime(1810): FATAL EXCEPTION: main
    03-21 11:17:34.897: E/AndroidRuntime(1810): java.lang.NullPointerException
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.widget.Editor.onTouchUpEvent(Editor.java:1927)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.widget.TextView.onTouchEvent(TextView.java:8865)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.View.dispatchTouchEvent(View.java:7817)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2441)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2174)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2441)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2174)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2441)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2174)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2441)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2174)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2326)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1612)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.app.Activity.dispatchTouchEvent(Activity.java:2494)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2274)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.View.dispatchPointerEvent(View.java:8025)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4668)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4556)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4150)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4207)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4176)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4261)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4184)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4318)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4150)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4207)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4176)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4184)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4150)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6302)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6240)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6211)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6382)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.os.MessageQueue.nativePollOnce(Native Method)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.os.MessageQueue.next(MessageQueue.java:132)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.os.Looper.loop(Looper.java:124)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at android.app.ActivityThread.main(ActivityThread.java:5455)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at java.lang.reflect.Method.invokeNative(Native Method)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at java.lang.reflect.Method.invoke(Method.java:525)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
    03-21 11:17:34.897: E/AndroidRuntime(1810):     at dalvik.system.NativeStart.main(Native Method)

logcat 一下,可以吗?你在模拟器中试过了吗?如果它在某些设备上工作而在其他设备上不工作,那么很可能是三星对某些东西进行了微调。 - ucsunil
它也可以在模拟器上运行,是的。虽然我需要一个解决方法才能让它在三星设备上运行。 - nitrobuster
从您的logcat来看,似乎确实是三星特定的问题,因为其中没有任何指向代码问题的内容。您必须使用什么解决方法才能在三星设备上运行它?我正在尝试在谷歌上搜索,我看到三星的开发者网站有一个页面,显示包含HTML文本但不包含链接的EditText。 - ucsunil
我还没有完全想出一个解决方法,我仍在努力寻找解决方案。 - nitrobuster
有趣的是 - 当我错误地使用TextView样式作为EditText而不是实际的EditText时,我在三星设备上收到了相同的堆栈跟踪。 - Boris Treukhov
1个回答

6
这篇文章对我很有帮助,如果有人对答案感兴趣的话。该文章涉及点击链接和在Android中的EditView中复制/粘贴菜单相关的内容。请参考这里

1
使用您链接中提供的自定义MovementMethod,是否可以避免出现NullPointerException? - Csaba Szugyiczki
1
是的,它确实帮助我避免了它们。 - nitrobuster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接