使用 TextView 方法获取 NoSuchMethodError

Posted

技术标签:

【中文标题】使用 TextView 方法获取 NoSuchMethodError【英文标题】:Getting NoSuchMethodError with TextView Methods 【发布时间】:2013-07-10 03:56:37 【问题描述】:

我得到了一个NoSuchMethodError,其中包含一个我创建的扩展TextView 的类。我唯一做的就是添加一些变量并添加onLongClickListener。没有更多的修改。

当我在我的 android 手机 4.1.2 中使用我的应用程序时,一切正常 但是在我朋友的 4.0.3 手机中,它会抛出这个NoSuchMethodError

这是我创建扩展 Textview 的类时的代码:

descrip=new TextViewList(context, admin, this);
descrip.setPadding(0, 15, 0, 15);
descrip.setGravity(Gravity.CENTER);
descrip.setTextAlignment(Gravity.CENTER);                   
descrip.setText(c.getString(c.getColumnIndex("Descripcion")));
descrip.setTag(c.getString(c.getColumnIndex("ID")));
descrip.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
descrip.setHeight(LinearLayout.LayoutParams.MATCH_PARENT);
descrip.setBackground(img);
layDescripcion.addView(descrip);

首先它使用setTextAlignment 抛出异常,然后我删除它并使用setBackground 方法再次抛出它。

是什么导致了这个错误?这是否意味着我的应用与 Android 不兼容 低于 4.1.2 的版本?创建项目时,我将最小值设置为 2.2。我在需要它们的地方使用 android.support.v4 库。

这是 LogCat:

07-09 21:45:26.715: E/AndroidRuntime(13481): FATAL EXCEPTION: main
07-09 21:45:26.715: E/AndroidRuntime(13481): java.lang.NoSuchMethodError: modelo.TextViewList.setBackground
07-09 21:45:26.715: E/AndroidRuntime(13481):    at modelo.ListaTextViewList.mostrarGastos(ListaTextViewList.java:92)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at controlador.AdminUI.establecerListaGastoVar(AdminUI.java:138)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at com.ConApps.walletsaver.GastosVariables.onCreate(GastosVariables.java:23)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.Activity.performCreate(Activity.java:4465)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.os.Looper.loop(Looper.java:137)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at android.app.ActivityThread.main(ActivityThread.java:4507)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at java.lang.reflect.Method.invokeNative(Native Method)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at java.lang.reflect.Method.invoke(Method.java:511)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-09 21:45:26.715: E/AndroidRuntime(13481):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

developer.android.com/reference/android/widget/TextView.html。检查支持的方法 【参考方案1】:

setBackground() 仅在 16 api 中引入。请改用setBackgroundDrawable()

所有少于16个api的手机,他们将支持setBackgroundDrawable()

【讨论】:

所以我只需要寻找旧版本android支持的方法吗?在这种情况下,对于这个项目,我将 minimun api 设置为 8。如果这些旧 api 没有方法,还有其他选择吗?顺便谢谢你的回答:) 如果你不能使用 setbackground,我写的也是一样,只需使用 setbackgrounddrawable。这仅适用于低版本......如果你想要更多的澄清做一些研发。如果你喜欢这个并且让它接受 好的。是的,你完成了这项工作。然后请确保使用正确的方法来支持较低的版本。感谢眼镜王蛇先生的帮助【参考方案2】:

这是解决此问题的方法:

Drawable d = this.res.getDrawable(R.drawable.metro_circle);
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN ) 
    metroIconTextView.setBackground(d);

else 
    metroIconTextView.setBackgroundDrawable(d);

【讨论】:

以上是关于使用 TextView 方法获取 NoSuchMethodError的主要内容,如果未能解决你的问题,请参考以下文章

IOS textView获取光标定位,以及选中

Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)

Android在onCreate()方法中动态获取TextView控件的高度

文本表单TextView的ShareIntent

如何在 TextView 中获取 ClickableSpan 的坐标?

textview 显示html方法解析