我已經創建了一個方法來基於從服務器獲得的Http響應填充數組。我以簡單的格式收到回覆,並使用掃描儀讀取。響應只有大約8000個條目(浮點數和整數),並且需要大約1或2分鐘才能填充ArrayList。這裏是代碼填充ArrayList中的Android性能問題
public void update(String str) {
ProgressDialog pDialog = new ProgressDialog(context);
pDialog.setMessage("Atualizando pesos, aguarde");
pDialog.show();
BufferedReader r = new BufferedReader(new StringReader(str));
Scanner s = null;
try{
s = new Scanner(r);
ArrayList<ArrayList<ArrayList<Double> > > weights = new ArrayList<ArrayList<ArrayList<Double> > >();
while(s.hasNextInt()){
ArrayList<ArrayList<Double> > wl = new ArrayList<ArrayList<Double> >();
int layerId = s.nextInt(), neuronsAmt = s.nextInt(), inputSize = s.nextInt();
Log.d("UpdateTask", "Layer " + layerId + ", neuronios: " + neuronsAmt + ", inputSize: " + inputSize);
for(int i = 0; i < neuronsAmt; i++){
ArrayList<Double> wi = new ArrayList<Double>();
for(int j = 0; j < inputSize; j++){
wi.add(s.nextDouble());
}
wl.add(wi);
}
weights.add(wl);
this.weights = weights;
if(s.hasNext() && !s.hasNextInt())
Log.d("UpdateTask", "Depois de tudo tem " + s.next());
}
}finally{
if(s != null) s.close();
pDialog.dismiss();
}
}
我收到HTTP響應後從AsyncTask調用它。
編輯:我會盡力在這裏解釋HTTP結構。響應實際上給出了神經網絡的權重。基本上它是一組矩陣(它應該保持爲矩陣,以評估神經網絡的工作情況)。 HTTP響應如下: 有N個矩陣。每個以一個整數(矩陣ID)開頭,後面跟着矩陣中的行數(R)和列數(C)。之後,有R * C浮點數表示存儲在矩陣中的值。當您找不到其他圖層ID時,輸入會終止。
PS:我無法使對話框工作,但這對我來說現在不是問題。
? – ThaMe90
它實際上是一個矩陣數組(這是我試圖做的神經網絡中的權重)。我只是不知道更好的方法來做到這一點(我剛剛開始用Java編寫代碼)。 –
嗯,我不知道確切的效果,但我可以想象這是非常低效的。 – ThaMe90