Android ListView中的崩溃

Android ListView中的崩溃,android,listview,Android,Listview,我随机遇到了车祸。 我不知道原因,因为日志报告没有显示任何行号。 我想我在列表视图中看到了这个崩溃 我已将此列表视图附加到相对布局下方。我正在根据记录设置listview的可见性 STACK_TRACE=java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setDrawingCacheBackgroundColor(int)' on a null object refer

我随机遇到了车祸。 我不知道原因,因为日志报告没有显示任何行号。 我想我在列表视图中看到了这个崩溃

我已将此列表视图附加到相对布局下方。我正在根据记录设置listview的可见性

STACK_TRACE=java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setDrawingCacheBackgroundColor(int)' on a null object reference
at android.widget.AbsListView.obtainView(AbsListView.java:2357)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
at android.widget.ListView.onMeasure(ListView.java:1182)
at android.view.View.measure(View.java:17430)
at android.widget.RelativeLayout.measureChild(RelativeLayout.java:697)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
at android.view.View.measure(View.java:17430)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
请帮我摆脱这场车祸

代码:

searchEt.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,
整数计数){
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
//TODO自动生成的方法存根
}
@凌驾
公共无效后文本已更改(可编辑){
如果(s.toString().trim().length()>0){
placesTask=新的placesTask();
execute(s.toString());
}
}
});
私有类ParserTask扩展
异步任务{
JSONObject jObject;
@凌驾
受保护列表doInBackground(字符串…jsonData){
列表位置=空;
PlaceJSONParser PlaceJSONParser=新的PlaceJSONParser(getActivity());
试一试{
jObject=新的JSONObject(jsonData[0]);
places=placeJsonParser.parse(jObject);
}捕获(例外e){
Log.d(“异常”,例如toString());
}
返回地点;
}
@凌驾
受保护的void onPostExecute(列表结果){
自动完成位置=结果;
if(searchLayout.getVisibility()==View.VISIBLE){
试一试{
if(result!=null&&result.size()>0){
rootView.findViewById(R.id.dummy_iv).setVisibility(
视图(可见);
suggestionLv.setAdapter(新位置SuggestionListAdapter(
getActivity(),result));
suggestionLv.setVisibility(View.VISIBLE);
}否则{
rootView.findViewById(R.id.dummy_iv).setVisibility(
视图(已消失);
suggestionLv.setVisibility(View.GONE);
}
}捕获(例外e){
e、 printStackTrace();
}
}
}
}
如果我得到结果,我将显示列表;如果没有找到结果,我将隐藏列表

我的适配器-

public class PlaceSuggestionListAdapter extends BaseAdapter {

    Context mContext;
    List<TextSearchPlace> places;

    public PlaceSuggestionListAdapter(Context mContext,
            List<TextSearchPlace> places) {
        this.mContext = mContext;
        this.places = places;
    }

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

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (mContext != null) {
            if (convertView == null) {
                convertView = ((Activity) mContext).getLayoutInflater()
                        .inflate(R.layout.place_list_item, null);

                holder = new ViewHolder();
                holder.nameTv = (TextView) convertView
                        .findViewById(R.id.name_tv);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            UtilFunction.labelTypeFace(holder.nameTv, mContext.getAssets());
            holder.nameTv.setText(places.get(pos).getName());
        }

        return convertView;
    }

    private static class ViewHolder {
        public TextView nameTv;
    }

}
公共类PlaceSuggestionListAdapter扩展了BaseAdapter{
语境;
列出地点;
public PlaceSuggestionListAdapter(上下文mContext,
(列出地点){
this.mContext=mContext;
这个地方=地方;
}
@凌驾
public int getCount(){
返回places.size();
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int pos、视图转换视图、视图组父视图){
最终持票人;
如果(mContext!=null){
if(convertView==null){
convertView=((活动)mContext.GetLayoutFlater()
.充气(R.layout.place\u list\u项,空);
holder=新的ViewHolder();
holder.nameTv=(TextView)convertView
.findviewbyd(R.id.name_tv);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
UtilFunction.labelTypeFace(holder.nameTv,mContext.getAssets());
holder.nameTv.setText(places.get(pos.getName());
}
返回视图;
}
私有静态类视图持有者{
公共文本视图名称电视;
}
}
您解决了这个问题吗? 我得到的正是保存日志的转储。 在我的例子中,当我试图在适配器使用的arraylist中有3个以上的条目时。尝试更改为不同类型的布局。不走运

但是5分钟前我发现了我自己非常非常尴尬的错误。 My Adapter.getView()返回null(剩下三天的调试测试行…),但logcat从Main开始,在AbsListView.GetainView()停止,因此没有太多指向My getView()。

您解决了这个问题吗? 我得到的正是保存日志的转储。 在我的例子中,当我试图在适配器使用的arraylist中有3个以上的条目时。尝试更改为不同类型的布局。不走运

但是5分钟前我发现了我自己非常非常尴尬的错误。
我的Adapter.getView()返回了null(剩下三天的调试测试行…),但logcat从Main开始,在AbsListView.ActainView()停止,因此没有太多指向我的getView()。

我怀疑你在getView中返回了null视图,McContext可能是null。不要存储对上下文的引用。在适配器的getView()中使用View.getContext()。

我怀疑您在getView中返回的是空视图,McContext可能为空。不要存储对上下文的引用。在适配器的getView()中使用View.getContext()。

这需要仔细检查问题。 我认为这是问题的原因


getView()返回null。

这需要仔细检查问题。 我认为这是问题的原因


getView()返回null。

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.view.view.setDrawingCacheBackgroundColor(int)'
何时在代码中调用
setDrawingCacheBackgroundColor()
?请发布相关代码。没有代码,很难找出问题所在
public class PlaceSuggestionListAdapter extends BaseAdapter {

    Context mContext;
    List<TextSearchPlace> places;

    public PlaceSuggestionListAdapter(Context mContext,
            List<TextSearchPlace> places) {
        this.mContext = mContext;
        this.places = places;
    }

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

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (mContext != null) {
            if (convertView == null) {
                convertView = ((Activity) mContext).getLayoutInflater()
                        .inflate(R.layout.place_list_item, null);

                holder = new ViewHolder();
                holder.nameTv = (TextView) convertView
                        .findViewById(R.id.name_tv);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            UtilFunction.labelTypeFace(holder.nameTv, mContext.getAssets());
            holder.nameTv.setText(places.get(pos).getName());
        }

        return convertView;
    }

    private static class ViewHolder {
        public TextView nameTv;
    }

}