我使用的是聽一個服務器,並作出了publishProgess(receivedMessage)每次收到郵件時的的AsyncTask,所以我保存具體信息在一個字段「ArrayList messageStrings;」中。使用信息去「OnProgressUpdate」中的AsyncTask(安卓)的
現在我想訪問「messageStrings」從的AsyncTask類以外-Arraylist,但當然,我得到一個「ConcurrentModificationException的」誤差。
我曾經試圖「同步」使用它的所有功能,但我不會幫助。
那麼如何處理出的AsyncTask正確的消息?
代碼:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.ArrayList;
import android.os.AsyncTask;
public class ReadInStream extends AsyncTask<Object, String, Object> {
Socket socket;
public ArrayList<String> stringList;
//Socket der Verbindung
public ReadInStream(Socket socket) {
this.socket = socket;
this.stringList = new ArrayList<String>();
}
@Override
protected Object doInBackground(Object... arg0) {
try {
System.out.println("Thread ReadInStream started.");
BufferedReader inStream = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
while (true) {
// jede Zeile einlesen und überprüfen, ob sie etwas enthaelt
String inputLine = inStream.readLine();
if (inputLine != null && inputLine.trim() != ""
&& inputLine.length() > 0) {
System.out.println("Recieved: " + inputLine);
publishProgress(inputLine);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
@Override
protected synchronized void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
stringList.add(values[0]);
}
public synchronized ArrayList<String> getStringList(){
return this.stringList;
}
}
如果我把它叫做:
commandList = serverConnection.readIn.getStringList();
for(String item: commandList){
if (item.startsWith("71 53 11 40")){
CofKleinEsp = Integer.decode(item.substring(12));
System.out.println(CofKleinEsp);
commandList.remove(item);}
你可以分享你的代碼的一部分線程...? –
對不起,我希望這可以幫助。 – Reyny
你可以宣佈你的ArrayList揮發性,當你修改列表中使用synchronized塊......只有當你正在使用列表... –