我的项目中有一个小问题。我在解析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
告诉我如何修复它?请!
答案 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
}