代码异常奇怪

时间:2014-04-30 02:48:52

标签: android asynchronous broadcastreceiver

我有一个问题,我在一行上调用一个方法,在下一行我调用另一个方法,需要先前的方法完成,但不是正在发生的事情,我得到一个NPE;

这是我的专栏,它是在我长时间点击列表时开始的

@Override
public boolean onItemLongClick(AdapterView<?> adapter, View arg1, int pos,
        long arg3) {

    String nick = ((UserList) adapter.getAdapter()).getLista().get(pos)
            .getNick();

    if (activity.service.getConversa(nick) == null) {
        activity.service.addPVTConversa(nick); //need this completed
    } 
        activity.selectTab(nick); //to call this

    return true;
}

然后我去addPVTConversa():

public void addPVTConversa(String target) {
    pvts.add(new Conversa(this, target));
    Intent it = new Intent(MyService.ACTION_NEW_PVT);
    it.putExtra(MyService.EXTRA_NICK, target);
    LocalBroadcastManager.getInstance(MyService.this).sendBroadcast(it);
}

接着是接收者:

@Override
    public void onReceive(Context context, Intent intent) {
        String target = intent.getStringExtra(MyService.EXTRA_NICK);
        addPVTTab(target);

    }

这是我的问题:我需要在addPVTTab()之后调用selectTab()方法,因为selectTab()正在查找尚未创建的选项卡。所有代码都在主线程上运行,但selectTab()在addPVTTab()之前调用。我该怎么办? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

是的,这是sendBroadcast()/onReceive()的预期。您应该在selectTab()中致电receiver.onReceive()