【问题标题】:Autocomplete textview got crashed for devices vesion 5.0 above对于 5.0 以上版本的设备,Autocompletetextview 崩溃了
【发布时间】:2015-09-10 04:57:38
【问题描述】:

我在我的应用程序中使用自动完成文本视图,它适用于所有设备和设备版本。但是,我的应用程序在尝试开始输入设备版本 5.0 的自动文本视图时崩溃了。

我使用了以下编码中的自定义自动完成文本视图适配器类

Autocompletetextview with custom adapter and filter

它在 logcat 中显示以下错误

6-24 12:01:26.688 12893-12893/com.app.ex D/AndroidRuntime: 关闭虚拟机 06-24 12:01:26.699 12893-12893/com.app.ex E/AndroidRuntime:致命异常:主要 进程:com.app.ex,PID:12893 java.lang.NegativeArraySizeException:-512 在 dalvik.system.VMRuntime.newNonMovableArray(本机方法) 在 android.graphics.Bitmap.nativeCreate(Native Method) 在 android.graphics.Bitmap.createBitmap(Bitmap.java:843) 在 android.graphics.Bitmap.createBitmap(Bitmap.java:803) 在 android.view.View.buildDrawingCache(View.java:14291) 在 android.view.View.updateDisplayListIfDirty(View.java:14047) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.updateDisplayListIfDirty(View.java:14061) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.updateDisplayListIfDirty(View.java:14061) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.draw(View.java:15135) 在 android.view.View.updateDisplayListIfDirty(View.java:14066) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.updateDisplayListIfDirty(View.java:14061) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.draw(View.java:15135) 在 android.view.View.updateDisplayListIfDirty(View.java:14066) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.updateDisplayListIfDirty(View.java:14061) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.updateDisplayListIfDirty(View.java:14061) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.View.draw(View.java:14856) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3406) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200) 在 android.view.View.draw(View.java:15135) 在 android.widget.FrameLayout.draw(FrameLayout.java:592) 在 com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2595) 在 android.view.View.updateDisplayListIfDirty(View.java:14066) 在 android.view.View.getDisplayList(View.java:14089) 在 android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:266) 在 android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:272) 在 android.view.ThreadedRenderer.draw(ThreadedRenderer.java:311) 在 android.view.ViewRootImpl.draw(ViewRootImpl.java:2522) 在 android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2367) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1998) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1077) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5884) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 在 android.view.Choreographer.doCallbacks(Choreographer.java:580) 在 android.view.Choreographer.doFrame(Choreographer.java:550) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135)

【问题讨论】:

  • 你能发布你的代码吗??
  • 如果您可以添加您正在使用的代码,尤其是导致崩溃的部分,那将会很有帮助。还要发布一个更完整的 logcat。那条线可能不是要关注的线
  • 我已经更新了我的问题,感谢您的回复
  • area_auto_adapter = new AutoCompleteAdapter(Home_Activity.this, R.layout.searchtext, R.id.searchtext, area_name_array); txt_area.setAdapter(area_auto_adapter);

标签: android autocomplete


【解决方案1】:

我下面的代码在棒棒糖中完美运行,你可以看看

class GooglePlacesAutocompleteAdapter extends ArrayAdapter<VehicleVo>
            implements Filterable {

        private LayoutInflater mInflater;

        public GooglePlacesAutocompleteAdapter(Context context,
                int textViewResourceId) {
            super(context, textViewResourceId);
            mInflater = LayoutInflater.from(context);
            resultList = new ArrayList<VehicleVo>();
        }

        @Override
        public int getCount() {
            return resultList.size();
        }

        @Override
        public VehicleVo getItem(int position) {
            return resultList.get(position);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            final ViewHolder holder;
            //your layout design code goes gere
            return convertView;
        }

        class ViewHolder {
            private TextView sLocationName;

        }

        @Override
        public Filter getFilter() {
            Filter filter = new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults filterResults = new FilterResults();
                    if (TextUtils.isEmpty(constraint)) {
                        resultList.addAll(vehiclelist);
                    } else {
                        // Retrieve the autocomplete results.
                        resultList = autocomplete(constraint.toString());
                        // Assign the data to the FilterResults
                        filterResults.values = resultList;
                        filterResults.count = resultList.size();
                    }
                    return filterResults;
                }

                @Override
                protected void publishResults(CharSequence constraint,
                        FilterResults results) {

                    LogUtil.d("result String" + results.count);

                    if (results != null && results.count > 0) {
                        notifyDataSetChanged();
                    } else {
                        notifyDataSetChanged();
                    }
                }
            };
            return filter;

        }
    }

【讨论】:

  • 嗨,madhu 感谢您的回复,然后您说我的适配器类有问题,但它适用于除 5.0 版以外的所有设备
  • 不,它不会工作:在publishResults 你根本没有使用results.values,那么它应该如何工作?另外,请发布一个工作代码:你的甚至无法编译
【解决方案2】:

它显示负错误异常。
因此请检查数组大小,您传递的数组是否大于 0,或者您设置为自动完成的适配器可能为 null 或为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多