安卓:java.lang.NoSuchMethodError上的LinearLayout $的LayoutParams< INIT>。 [英] Android: java.lang.NoSuchMethodError on LinearLayout$LayoutParams.<init>

查看:233
本文介绍了安卓:java.lang.NoSuchMethodError上的LinearLayout $的LayoutParams< INIT>。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想增加约利润率的TextView ,并写了下面的:

I'm trying to add margins around a TextView, and have written the following:

TextView t = (TextView)getLayoutInflater().inflate(R.layout.plaintexttable, null);
t.setText(new String(cp.decryptChar(words[i].charAt(l))+""));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new    LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
params.setMargins(2,2,2,2);
t.setLayoutParams(params);
plainRow.addView(t);

在运行code,我得到 LinearLayout.LayoutParams 定义错误如下:

When running the code, I get an error on LinearLayout.LayoutParams definition as follows:

01-18 05:50:41.228: E/AndroidRuntime(1950): java.lang.NoSuchMethodError: android.widget.LinearLayout$LayoutParams.<init>
01-18 05:50:41.228: E/AndroidRuntime(1950):     at com.napoleonicmonkey.cryptopuzzle.PuzzleScreen.refreshPuzzle(PuzzleScreen.java:97)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at com.napoleonicmonkey.cryptopuzzle.PuzzleScreen.onGlobalLayout(PuzzleScreen.java:61)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:655)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1748)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.Choreographer.doFrame(Choreographer.java:532)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.os.Handler.handleCallback(Handler.java:725)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.os.Looper.loop(Looper.java:137)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at android.app.ActivityThread.main(ActivityThread.java:5041)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at java.lang.reflect.Method.invokeNative(Native Method)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at java.lang.reflect.Method.invoke(Method.java:511)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-18 05:50:41.228: E/AndroidRuntime(1950):     at dalvik.system.NativeStart.main(Native Method)

此错误通常与方法被添加在较新的Andr​​oid版本,但据我可以看到 LinearLayout.LayoutParams 此后一直围绕API 1。

This error is typically related to methods being added in newer versions of Android, but as far as I can see LinearLayout.LayoutParams has been around since API 1.

还有什么可能造成的呢?

What else could be causing it?

推荐答案

我也遇到了类似的错误。这个答案可能是有用的人。也可应用到的FrameLayout例如

I have faced a similar error. This answer might be useful for someone. Also It can be applied to FrameLayout for example.

我想,虚拟机无法找到没有<一个href="http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#LinearLayout.LayoutParams%28android.view.ViewGroup.LayoutParams%29"相对=nofollow>的LayoutParams(ViewGroup.LayoutParams P),但<一个href="http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#LinearLayout.LayoutParams%28android.widget.LinearLayout.LayoutParams%29"相对=nofollow>的LayoutParams(LinearLayout.LayoutParams源)构造可从API 19。

I suppose that VM cannot find not LayoutParams(ViewGroup.LayoutParams p) but LayoutParams (LinearLayout.LayoutParams source) constructor which is available from API 19.

这情况可能是,如果你的PuzzleScreen exdends的LinearLayout。在code可以构建目标19,但在较旧的Andr​​oid的崩溃进行编译。编译器把所述第二方法签名成字节code,但这种方法是不是真的上可用的设备。当目标低于19的编译器把正确的签名(预期行为),因此code运行良好无处不在。

This situation can be if your PuzzleScreen exdends LinearLayout. The code can be compiled with build target 19, but crashes on older Android. The compiler puts the second method signature into bytecode, but this method isn't really available on devices. When the target is less than 19 the compiler put the right signature (expected behaviour) so that the code runs well everywhere.

因此​​,该解决方案是使用较旧目标API或手动进行转换,例如:

Thus, the solution is to use an older target API or to make cast manually, for instance:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((ViewGroup.MarginLayoutParams)(new    LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)));

这篇关于安卓:java.lang.NoSuchMethodError上的LinearLayout $的LayoutParams&LT; INIT&GT;。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆