あなたの質問が正しく理解できた場合、Web サーバーから取得した新しいファイルを使用して、ローカルの電話ストレージのローカル ファイルを更新しようとしているということでよろしいですか??
ファイルをローカルで更新するには、oldFilePaths と newFilePaths の 2 つのファイルパスの配列があると仮定します。
古いものを繰り返して削除し、新しいものを次のように配置します。
foreach(var oldFilePath in foldFilePaths)
{
var oldFileName = Path.GetFileName(oldFilePath);
// This assumes that your files (old and new Ones have the same name).
// And that you are saving your new files in a temporary folder.
var newFilePath = newFilePaths.ToList().FirstOrDefault(f => Path.GetFileName(f) == oldFileName);
if (newFilePath != null)
{
File.Delete(oldFilePath);
File.Copy(newFilePath, oldFilePath);
}
}
ここで、データベース内のファイル パスを更新することもできます。データベース内のファイル名に一意の識別子があると仮定します。これを行うには、次のようにします。
const string selectSqlQuery = "SELECT FileID, FilePath FROM FILES";
var updateSqlQuery = "UPDATE FILES SET FilePath = '{0}' WHERE FileID = '{1}'";
var oldFilesList = new List<MyFile>(); // assuming you have object of MyFile {Id, FilePath};
using(var connection = new SqliteConnection(connectionString))
{
connection.Open();
// reading old files from Database
using (var command = connection.Command())
{
command.CommandText = selectSqlQuery;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read())
{
oldFilesList.Add(new MyFile { Id = reader["Id"], FilePath = reader["FilePath"] });
}
}
// updating new filePaths, assuming that you have newFilesList from calling the web service
foreach(var oldFile in oldFilesList)
{
var newFile = newFilesList.ToList().FirstOrDefault(f => f.Id == oldFile.Id);
if (newFile != null)
{
using (var command = connection.CreateCommand())
{
command.CommandText = string.Format(updateSqlQuery, newFile.Id, newFile.FilePath);
command.ExecuteNonQuery();
}
}
}
}
// 上記のコードは C# (MonoDroid) で書かれています。これは私が使用しているものであり、Java から遠く離れているとは思わないからです。