Android ListView中的崩溃
我随机遇到了车祸。 我不知道原因,因为日志报告没有显示任何行号。 我想我在列表视图中看到了这个崩溃 我已将此列表视图附加到相对布局下方。我正在根据记录设置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
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;
}
}