我有一个listView,一切都很好,但是我没有太多的东西在上面。当项目列表很长时,当我向下滚动时,它会在某个点崩溃.
这是我的适配器代码:
public class SearchListViewAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
private JsonArray searchResults;
public SearchListViewAdapter(Context context, JsonArray searchResults) {
this.searchResults = searchResults;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return searchResults.count();
}
@Override
public Object getItem(int position) {
return searchResults.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
JsonObject searchResult = (JsonObject)getItem (position);
ViewHolder holder = null;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.custom_search_result, null);
holder = new ViewHolder();
holder.txtFullName = (TextView) convertView.findViewById(R.id.FullName);
holder.txtDateScan = (TextView) convertView.findViewById(R.id.DateScan);
holder.txtBarcodeKeyword = (TextView) convertView.findViewById(R.id.BarcodeKeyword);
holder.txtHourScan = (TextView) convertView.findViewById(R.id.HourScan);
holder.imgScanStatus = (ImageView) convertView.findViewById(R.id.ScanStatus);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtFullName.setText(searchResult.getString ("FirstName") + searchResult.getString ("LastName"));
holder.txtBarcodeKeyword.setText(searchResult.getString("Barcode"));
JsonObject ScanInfo = null;
try {
ScanInfo = searchResult.getObject("ScanInfo");
} catch (JsonException e) {
e.printStackTrace();
}
String LastScanTime[] = ScanInfo.getString("LastScanTime").split(" ");
holder.txtDateScan.setText(LastScanTime[0]);
try {
if(ScanInfo.getInt("Scans") == 0 || StringUtils.isNullOrEmpty(ScanInfo.getString("Scans")))
holder.imgScanStatus.setImageResource(R.drawable.red);
else if(ScanInfo.getInt("Scans") % 2 == 0)
holder.imgScanStatus.setImageResource(R.drawable.orange);
else if(ScanInfo.getInt("Scans") % 2 == 1)
holder.imgScanStatus.setImageResource(R.drawable.green);
} catch (JsonException e) {
e.printStackTrace();
}
holder.txtHourScan.setText(LastScanTime[1]);
return convertView;
}
static class ViewHolder {
TextView txtFullName;
TextView txtDateScan;
TextView txtBarcodeKeyword;
TextView txtHourScan;
ImageView imgScanStatus;
}
}而逻辑猫:
09-22 16:35:31.191: E/AndroidRuntime(31440): FATAL EXCEPTION: main
09-22 16:35:31.191: E/AndroidRuntime(31440): java.lang.NullPointerException
09-22 16:35:31.191: E/AndroidRuntime(31440): at com.eventpulse.app.SearchListViewAdapter.getView(SearchListViewAdapter.java:72)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.widget.AbsListView.obtainView(AbsListView.java:2255)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.widget.ListView.makeAndAddView(ListView.java:1769)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.widget.ListView.fillDown(ListView.java:672)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.widget.ListView.fillGap(ListView.java:636)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5040)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4197)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.view.Choreographer.doFrame(Choreographer.java:524)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.os.Handler.handleCallback(Handler.java:615)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.os.Handler.dispatchMessage(Handler.java:92)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.os.Looper.loop(Looper.java:137)
09-22 16:35:31.191: E/AndroidRuntime(31440): at android.app.ActivityThread.main(ActivityThread.java:4745)
09-22 16:35:31.191: E/AndroidRuntime(31440): at java.lang.reflect.Method.invokeNative(Native Method)
09-22 16:35:31.191: E/AndroidRuntime(31440): at java.lang.reflect.Method.invoke(Method.java:511)
09-22 16:35:31.191: E/AndroidRuntime(31440): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-22 16:35:31.191: E/AndroidRuntime(31440): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-22 16:35:31.191: E/AndroidRuntime(31440): at dalvik.system.NativeStart.main(Native Method)你能帮帮我吗,快把我逼疯了!
谢谢。
编辑:第72行:String LastScanTime[] = ScanInfo.getString("LastScanTime").split(" ");
这可能与这篇文章有关:Android ListView throwing NullPointerException when I try to scroll
发布于 2013-09-22 16:06:29
问题在于您的Json代码,任何json对象都是空的,在应用之前,您应该注意这一点,并检查null的值。
您应该检查空值。
if(mJsonObject!=null)
{
// Then perform you task
}您的代码在可疑位置检查空值,如ScanInfo或LastScanTime
holder.txtFullName.setText(searchResult.getString ("FirstName") + searchResult.getString ("LastName"));
holder.txtBarcodeKeyword.setText(searchResult.getString("Barcode"));
JsonObject ScanInfo = null;
try {
ScanInfo = searchResult.getObject("ScanInfo");
} catch (JsonException e) {
e.printStackTrace();
}
String LastScanTime[] = ScanInfo.getString("LastScanTime").split(" "); // May be here its not getting values and unable to split the content
holder.txtDateScan.setText(LastScanTime[0]); // if thats false may be LastScanTime is null
try {
if(ScanInfo.getInt("Scans") == 0 || StringUtils.isNullOrEmpty(ScanInfo.getString("Scans")))
holder.imgScanStatus.setImageResource(R.drawable.red);
else if(ScanInfo.getInt("Scans") % 2 == 0)
holder.imgScanStatus.setImageResource(R.drawable.orange);
else if(ScanInfo.getInt("Scans") % 2 == 1)
holder.imgScanStatus.setImageResource(R.drawable.green);
} catch (JsonException e) {
e.printStackTrace();
}
holder.txtHourScan.setText(LastScanTime[1]);https://stackoverflow.com/questions/18945623
复制相似问题