0
3つのファイルを格納するSqliteテーブルがあり、テーブルから読み込むときにはうまく動作しますが、サーバーにアップロードするときは最後のファイルをアップロードします3回。私のコードで何が間違っているのか分かりません。私にこの問題の解決策を教えてください。Androidでサーバーにファイルをアップロードする - 最後のファイルをアップロードする
List<MediaFiles> mediaFiles = mfh.getAllFiles();
for (MediaFiles mf : mediaFiles) {
filePath = mf.getFile();
lat = Double.parseDouble(mf.getGeolat());
longi = Double.parseDouble(mf.getGeolng());
String log = "Id: " + mf.getId() + " ,File: " + mf.getFile() + " ,latitued: " + mf.getGeolat() + " ,longitued: " + mf.getGeolng();
Log.d("File Table Row: ", log);
new UploadFileToServerMain().execute();
}
そして、これは、アップローダクラスです:
private class UploadFileToServerMain extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
// setting progress bar to zero
//progressBar.setProgress(0);
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected String doInBackground(Void... params) {
return uploadFile();
}
@SuppressWarnings("deprecation")
private String uploadFile() {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(global.getURL()+"fileUpload.php");
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new AndroidMultiPartEntity.ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num/(float) totalSize) * 100));
}
});
File sourceFile = new File(filePath);
// Adding file data to http body
entity.addPart("latitued", new StringBody(lat+""));
entity.addPart("longitued", new StringBody(longi+""));
entity.addPart("image", new FileBody(sourceFile));
entity.addPart("token",new StringBody(global.getMyToken()));
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
Log.e(TAG, "Response from server: " + result);
// showing the server response in an alert dialog
//showAlert(result);
super.onPostExecute(result);
}
}
を作成しますか? 3つのファイルすべてをループしますが、最後のファイルパスはfilePath変数にのみ格納します。 AsyncTasksを起動すると、同じfilePathのみが使用されます。そこにデバッグするか、ログに記録されているかどうかを確認してください。 編集:filePathが同じ場合は、filePathをパラメータとしてAsyncTaskに送信し、そこで使用する必要があります。 –
filePathは自分のアクティビティの最上位に定義されています –
filePathをパラメータとしてUploadFileToServerMainに渡す方法は? –