当前位置: 首页 > 面试题库 >

Spinner中的怪异NullPointerException

能帅
2023-03-14
问题内容

从Android 4.4 KitKat开始,我的应用程序崩溃了。似乎与微调器有关。我收到的错误的堆栈跟踪:

java.lang.NullPointerException
    at android.widget.TextView.makeNewLayout(TextView.java:6124)
    at android.widget.TextView.onMeasure(TextView.java:6400)
    at android.view.View.measure(View.java:16458)
    at android.widget.Spinner.setUpChild(Spinner.java:632)
    at android.widget.Spinner.makeView(Spinner.java:595)
    at android.widget.Spinner.getBaseline(Spinner.java:431)
    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1089)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
    at android.view.View.measure(View.java:16458)
    at com.android.internal.widget.ActionBarView.onMeasure(ActionBarView.java:1011)
    at android.view.View.measure(View.java:16458)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.widget.ActionBarContainer.onMeasure(ActionBarContainer.java:271)
    at android.view.View.measure(View.java:16458)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:254)
    at android.view.View.measure(View.java:16458)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2289)
    at android.view.View.measure(View.java:16458)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1914)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1111)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1293)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
    at android.view.Choreographer.doFrame(Choreographer.java:532)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4998)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
    at dalvik.system.NativeStart.main(Native Method)

我在动作栏中有微调器导航,我认为这与它有关。我正在使用ABS.Spinner数组适配器的getView方法有跟踪错误。这是我的getView方法:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (LoginUtils.isLogged()) {
            items[Properties.NAVIG_ITEM_MY_PROFILE] = LoginUtils.getTextForAdapter();
        } else {
            items[Properties.NAVIG_ITEM_MY_PROFILE] = context.getString(R.string.userProfile);
        }
        View view = convertView;
        if (view == null) {
            LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = vi.inflate(R.layout.ab_spinner_item, null);
        }
        String text = items[position];
        TextView menu = (TextView) view.findViewById(android.R.id.text1);
        if (title == null) {
            menu.setText(text);
        } else {
            menu.setText(title);
        }
        return view;
    }

如果我对此行发表评论:

//if (title == null) {
      menu.setText(text);
//    } else {
//        menu.setText(title);
//    }

问题消失了。有人有什么主意吗?


问题答案:

正如Peterdk 在这里描述的那样。您不需要删除

android:ellipsize =“ marquee”

他建议使用:

inflater.inflate(android.R.layout.simple_spinner_item,null); // WRONG
inflater.inflate(android.R.layout.simple_spinner_item,parent,false); // GOOD

那解决了我的问题。我猜想Android 4.4正试图严格限制布局



 类似资料:
  • 我刚刚在iOS 7 target上运行了一个演示应用程序,这是我得到的: 我正在使用一个故事板,它在iOS8中看起来很好。约束是正确的。 我已经检查过,例如UITableView在iOS 7中以偏移量开始 但这种情况下的问题是整件事,包括状态栏有偏移量,不知道这是什么。我在故事板中摆弄视图控制器的布局设置,没有任何效果。 我还创建了一个全新的(单视图)项目,运行时没有任何更改,也遇到了同样的问题。

  • Spinner小部件在输入框的左侧添加一个向上/向下箭头,从而允许用户递增/递减输入框中的值。 它允许用户直接键入值,或通过键盘,鼠标或滚轮旋转来修改现有值。 它还具有跳过值的步骤功能。 除了基本的数字功能外,它还支持全球化格式化选项(即货币,千位分隔符,小数等),从而提供方便的国际化屏蔽输入框。 以下示例取决于Globalize 。 您可以从https://github.com/jquery/g

  • 问题内容: 基本上,该网站可以正常运行12多个小时,然后突然停止工作。我将开始在以前运行良好的LINQ查询中引发奇怪的异常。 我在这篇文章的底部提供了堆栈跟踪。 根据在类似SO帖子上找到的建议,我通过直接从Server Explorer中的DB拖动表来删除并重新制作了DBML。比较Git中的新旧内容,我发现了一些不同的字段: 在dbml中将varchar(255)的一个实例设置为nchar(10)

  • Indicate the loading state of a component or page with spinners. About “spinners” can be used to show the loading state in your projects. They’re built only with HTML and CSS, meaning you don’t need a

  • 加载动画,可指定显示类型、尺寸和颜色。 引入 import { Spinner } from 'mint-ui'; Vue.component(Spinner.name, Spinner); 例子 指定类型 <mt-spinner type="snake"></mt-spinner> <mt-spinner type="double-bounce"></mt-spinner> <mt-spin

  • 描述 (Description) Widget Spinner函数可以与JqueryUI中的小部件一起使用.Spinner提供了一种从集合中选择一个值的快速方法。 语法 (Syntax) 以下是使用Spinner的简单语法 - $( "#menu" ).selectmenu(); 例子 (Example) 以下是一个显示Spinner用法的简单示例 - <!doctype html> <html