アプリケーションでユーザーの写真を表示する必要があり、アプリケーションもオフラインモードで動作するため、サーバーからその写真を取得するため、その写真をサーバーからSDカードに保存する必要があります。また、次回サーバーからデータを同期する場合画像が変更された場合、SD カードの画像も変更する必要がある 特定のユーザーの画像が変更されたかどうかを判断する方法
現在、ハードコードされたURLと静的ユーザーIDを使用していますが、サーバーから画像を次のように保存しています
public class fetchImage extends Activity implements OnClickListener {
int id;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
id = 1;// declaring static as of now
}
{
new BackgroundTask().execute();
File storagePath = Environment.getExternalStorageDirectory();
File imgFile = new File(storagePath, "/Pictures/" + id + ".jpg");
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile
.getAbsolutePath());
}
}
class BackgroundTask extends AsyncTask<Void, Void, Void> {
ProgressDialog mDialog;
protected void onPreExecute() {
mDialog = ProgressDialog.show(fetchImage.this, "",
getString(R.string.progress_bar_loading), true);
};
@Override
protected Void doInBackground(Void... params) {
try {
savesd(id, null);
} catch (final Exception e) {
}
return null;
}
private void savesd(int id, URL uri) throws IOException {
URL url;
if (uri == null) {
url = new URL("http://i.zdnet.com/blogs/3-29-androids.jpg");
} else {
url = uri;
}
InputStream input = url.openStream();
try {
File storagePath = Environment.getExternalStorageDirectory();
OutputStream output = new FileOutputStream(new File(
storagePath, "/Pictures/" + id + ".jpg"));
try {
byte[] buffer = new byte[20000];
int bytesRead = 0;
while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
output.write(buffer, 0, bytesRead);
}
} finally {
output.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
input.close();
}
}
protected void onPostExecute(Void result) {
mDialog.dismiss();
};
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
また、デバイスからこのアプリをアンインストールすると、SD カードからこれらのユーザー イメージも消去されるという問題が 1 つあります。