마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview NullPointerException 문의입니다. [closed]

0 추천

DB에서 해당 리스트만 뽑아서 출력하고 삭제를 하고 있는데

최초 APP설치후는 에러가 발생하지 않는데,

추가한 후 삭제를 하여 리스트에 출력값이 0이 되는 순간 NULLPOINT가 발생합니다.

listview 갱신은 바로 바로 되는데 0이 되는 순간 에러 발생하니 원인을 모르겠습니다.

확인부탁드립니다.

에러는  getcount의 return족에서 아래와 같은 에러가 발생합니다.

public int getCount(){
    return listViewItemList.size();
}

 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

 

 

public class ShopListAdapter extends BaseAdapter {
    private static final String TAG = "ListViewAdapter";
    private List<ListViewItem> listViewItemList = new ArrayList<ListViewItem>() ;
    Context textcontext;
    private SampDBHelper mHelper;


    public ShopListAdapter(Context context) {
        this.textcontext = context;
    }

    private class ViewHolder {
        ImageView iconImageView;
        TextView titleTextView;
        TextView descTextView;
        Button delete_btn;
    }

    // Adapter에 사용되는 데이터의 개수를 리턴. : 필수 구현
    @Override
    public int getCount(){
        return listViewItemList.size();
    }


    // position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴. : 필수 구현
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final Context context = parent.getContext();
        ShopListAdapter.ViewHolder holder = null;
        // "listview_item" Layout을 inflate하여 convertView 참조 획득.
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.listview_item_shop, parent, false);
            holder = new ShopListAdapter.ViewHolder();
            holder.iconImageView = (ImageView) convertView
                    .findViewById(R.id.imageView1);
            holder.titleTextView = (TextView) convertView
                    .findViewById(R.id.textView1);
            holder.descTextView = (TextView) convertView
                    .findViewById(R.id.textView2);
            holder.delete_btn = (Button) convertView.
                    findViewById(R.id.delete_btn);
            convertView.setTag(holder);
        } else {
            holder = (ShopListAdapter.ViewHolder) convertView.getTag();
        }


        // Data Set(listViewItemList)에서 position에 위치한 데이터 참조 획득
        ListViewItem listViewItem = listViewItemList.get(position);

        // 아이템 내 각 위젯에 데이터 반영
        holder.iconImageView.setImageDrawable(ContextCompat.getDrawable(context, listViewItem.getIcon()));
        holder.titleTextView.setText(listViewItem.getTitle());
        holder.descTextView.setText(listViewItem.getDesc());


        mHelper = new SampDBHelper(context);


        holder.delete_btn.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                int imgRes = ((ListViewItem) getItem(position)).getResId();
                String pos = String.valueOf(imgRes);
                String title = ((ListViewItem) getItem(position)).getTitle();
                String content = ((ListViewItem) getItem(position)).getDesc();
                mHelper.setshopData(title, content, null);

                ((RecipeShoppingActivity)textcontext).listview();
            }
        });

        return convertView;
    }

    // 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴. : 필수 구현

    @Override
    public long getItemId(int position) {
        return position ;
    }

    // 지정한 위치(position)에 있는 데이터 리턴 : 필수 구현
    @Override
    public ListViewItem getItem(int position) {
        return listViewItemList.get(position) ;
    }

    // 아이템 데이터 추가를 위한 함수. 개발자가 원하는대로 작성 가능.

    public void setItemList(ArrayList<ListViewItem> resultList)
    {
        listViewItemList = new ArrayList(); // arrayList 초기화
        listViewItemList.addAll((ArrayList) resultList); // list를 구성할 모든 data를 setting
        notifyDataSetChanged(); // list 갱신

        // 아래부분은 로그 찍어보기 위한 로직 실제 구현로직에서는 필요 없음
        SampDBHelper helper = new SampDBHelper(mContext);
        ArrayList<ListViewItem> dataArray = helper.getData_shop();
        if ( dataArray != null && dataArray.size() > 0 )
        {
            Log.e("TAG","size?? :: " +dataArray.size() );
            for ( int i = 0 ; i < dataArray.size() ; i ++ ) {
               Log.e("TAG","id :: " + dataArray.get(i).getResId());
                Log.e("TAG","image :: " + dataArray.get(i).getIcon());
                Log.e("TAG","title :: " + dataArray.get(i).getTitle());
                Log.e("TAG","content :: " + dataArray.get(i).getDesc());
                Log.e("TAG","favorite :: " + dataArray.get(i).getFavorite());
                Log.e("TAG","shop :: " + dataArray.get(i).getShop());
                Log.e("TAG", "==========================");
            }
        }
        listViewItemList=dataArray;
    }
}

 

    public void setshopData(String title, String content, String shop) {
        SQLiteDatabase db = null;
        try {
            db = getWritableDatabase();
            String sql = "UPDATE "
                    + TABLE_SAMP +
                    " SET " + COL_SHOP + " = '" + shop +
                    "' WHERE " + COL_TITLE + " = '" + title +
                    "' AND " + COL_CONTENT + " = '" + content + "'";
            db.execSQL(sql);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (db != null) {
                db.close();
                db = null;
            }
        }
    }



    public int get_shop_DataSize() {
        Cursor c = null;
        SQLiteDatabase db = null;

        String sql = "select * from table_samp where shop!='null'";
        //String sql = "select * from table_samp where shop is not null";
        try {
            db = getWritableDatabase();
            c = db.rawQuery(sql, null);

            if (c != null)
                return c.getCount();
            else
                return 0;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        } finally {
            if (c != null) {
                c.close();
                c = null;
            }
            if (db != null) {
                db.close();
                db = null;
            }
        }
    }

 

        ArrayList<ListViewItem> array = mHelper.getData();
        adapter.setItemList(array);
        if(mHelper.get_shop_DataSize()<=0){
            showAlert(getResources().getString(R.string.no_shop_items),
                    getResources().getString(R.string.no_shop_msg));
        }else{
            m_shop_ListView.setAdapter(adapter);
        }

 

질문을 종료한 이유: 자답
쿠쿠부다스 (6,470 포인트) 님이 2017년 9월 12일 질문
쿠쿠부다스님이 2017년 9월 12일 closed
...