我已经创建了一个方法来基于从服务器获得的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