从ListView位置的Parse查询数据

时间:2015-09-28 10:39:32

标签: android listview parse-platform

我的项目中有一个小问题。我在解析ListView时解析数据,我想当用户在项目中长按时,它会显示项目的详细信息。但是,当我使用代码时,它会NullPointerException。这是我的代码:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            Object object = listView.getAdapter().getItem(position);
            final Trade trade = (Trade)object;
            String idTrade = trade.getId();
            final Trade[] mTrade = new Trade[1];
            ParseQuery<ParseObject> query = ParseQuery.getQuery("trade");
            query.whereEqualTo("trade_id",idTrade);
            query.getFirstInBackground(new GetCallback<ParseObject>() {
                @Override
                public void done(ParseObject parseObject, com.parse.ParseException e) {
                    if (parseObject == null) {
                        Toast.makeText(getActivity(), "Something wrong", Toast.LENGTH_LONG).show();
                    } else {
                        mTrade[0] = (Trade) parseObject;
                    }
                }
            });
            Toast.makeText(getActivity(),"Topic "+mTrade[0].getTopic()+
                    "\nAddress "+mTrade[0].getAddress()+"\nGiá "+mTrade[0].getCost(),Toast.LENGTH_LONG).show();//NullPonterException

logcat的:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.evan.findingbus.Trade.getTopic()' on a null object reference

告诉我如何修复它?请!

1 个答案:

答案 0 :(得分:0)

原因是getFirstInBackground是异步调用,因此它进入不同的解析线程,而你的toast.makeText在结果出来之前运行,因为结果对象为null。简单!

您可以按如下方式编码:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            Object object = listView.getAdapter().getItem(position);
            final Trade trade = (Trade)object;
            String idTrade = trade.getId();
            final Trade[] mTrade = new Trade[1];
            ParseQuery<ParseObject> query = ParseQuery.getQuery("trade");
            query.whereEqualTo("trade_id",idTrade);
            ParseObject result = query.getFirst();
            mTrade[0] = (Trade) result;


            Toast.makeText(getActivity(),"Topic "+mTrade[0].getTopic()+
                    "\nAddress "+mTrade[0].getAddress()+"\nGiá "+mTrade[0].getCost(),Toast.LENGTH_LONG).show();//NullPonterException

        }