首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓应用程序在向下滚动ListView后崩溃

安卓应用程序在向下滚动ListView后崩溃
EN

Stack Overflow用户
提问于 2013-09-22 15:42:16
回答 1查看 4K关注 0票数 0

我有一个listView,一切都很好,但是我没有太多的东西在上面。当项目列表很长时,当我向下滚动时,它会在某个点崩溃.

这是我的适配器代码:

代码语言:javascript
复制
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;
}
}

而逻辑猫:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-22 16:06:29

问题在于您的Json代码,任何json对象都是空的,在应用之前,您应该注意这一点,并检查null的值。

您应该检查空值。

代码语言:javascript
复制
if(mJsonObject!=null)
{
// Then perform you task
}

您的代码在可疑位置检查空值,如ScanInfoLastScanTime

代码语言:javascript
复制
  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]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18945623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档