0

アプリケーションでユーザーの写真を表示する必要があり、アプリケーションもオフラインモードで動作するため、サーバーからその写真を取得するため、その写真をサーバーから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 つあります。

4

1 に答える 1

0

タイムスタンプを使用して、データを最後に同期し、そのタイムスタンプの後でのみファイルをダウンロードした時間を節約しました

于 2012-10-20T09:18:16.487 に答える