2011-03-14 82 views
0

我有我的活動註冊與我的服務作爲一個監聽器,並在一些事件我傳遞在服務內部舉行的集合,這是非常適合閱讀集合顯示與我的列表適配器。但是,現在我想在回調中添加到集合中,但它不像我認爲的參考那樣工作!作爲參數不添加到實際參考的Java通過收集

//last param tells service to send the list 
//first param sets listener that recieves the sent list 
m_uploader.request(new RequestListener() { 

    @Override 
    public void getCompletedUploads(ArrayList<Job> completed) { 
     //dont care 
    } 

    @Override 
    public void getActiveUploads(ConcurrentLinkedQueue<Job> current) { 
     current.add(m_job); //doesnt add to queue in my service 
     ImportActivity.this.finish(); 
    } 

}, ServiceRequestArgs.create(RequestActiveUploadsCommand.class)); 

//impl of request() 
public <T extends ICommand> void request(
    IFileUploadListener listener, ServiceRequestArgs<T> args) 
{ 
    if (args.getClassToken().equals(RequestActiveUploadsCommand.class)) 
     new RequestActiveUploadsCommand(listener, m_jobQueue).Execute(); 
    if (args.getClassToken().equals(RequestCompleteUploadsCommand.class)) 
     new RequestCompleteUploadsCommand(listener, m_completedList).Execute(); 
     //calls getActiveUploads on listener 
} 

編輯好了,我肯定只是路過的參考價值。 Java憎恨在一邊,我該如何改變acctual參考?

回答

1

current.add的呼叫應該像您期望的那樣向隊列添加新的Job

但是,Java的Concurrent集合有一些特殊的屬性。一個是由Concurrent集合返回的Iteratorweakly consistent:它可能反映或不反映自創建迭代器以來對集合所做的更改。

這適用於您手動請求Iterator以及自動創建爲for-each的一部分的請求。

+0

哦,字。我想我可以將其更改爲PriorityQueue並同步添加。你會同意嗎? –

+0

ACK!我已經被懲罰了!但是,這是值得一試的。 – Powerlord

+0

PriorityQueue沒有爲我工作,我只是要添加一個方法給我的IBinder ... –