0

パス内のいくつかのリソース ファイルを更新するために、インターネットからファイルをダウンロードする必要があります

"/data/data/" + context.getPackageName() + "/databases/"

メソッド

public static void updateDB(){
removeOldCopies();
//how to download a file in a specific directory without open browser????
}

ユーザーの介入なしでこのアクションを実行し、進行状況ダイアログのみを表示する必要があります

どうすればこれを行うことができますか?

4

1 に答える 1

1

AsyncTask を使用して、PreExecute() メソッドで進行状況ダイアログを表示し、PostExecute() メソッドで非表示/非表示にすることができます。

ProgressDialog prog = new ProgressDialog(this); // Create Progress Dialog


private class DownloadFile extends AsyncTask<Void, Integer, Void>{

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        //Display progressDialog before download starts
        prog.show();

    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        prog.hide(); //Hide Progress Dialog else use dismiss() to dismiss the dialog
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        InternetManager in = new InternetManager("http://url-to-download");
        in.fileRequest(); 
        return null;
    }
}

in.fileRequest()ダウンロードするファイルが表示されます。次に、FileOutputStream.write(bytes[])を使用してファイルに書き込みます。

そして最後にAsyncTaskスルーを呼び出し、

DownloadFile dd = new DownloadFile();
dd.execute(); 

InternetManagerインターネット関連のタスクを実行するクラス。

public class InternetManager {
    HttpClient httpclient;
    HttpGet httpget;
    HttpResponse httpresponse;
    HttpEntity httpentity;
    String url;
    String response = null;
    byte[] data = null;



    public InternetManager(String url) {
        this.url = url;
    }
    public byte[] fileRequest() {
        httpclient = new DefaultHttpClient();
        httpget = new HttpGet(url);
        try {
            httpresponse = httpclient.execute(httpget);
            httpentity = httpresponse.getEntity();
            data = EntityUtils.toByteArray(httpentity);
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.v("", "File downloaded URL: " + url);
        return data;
         }
}
于 2013-01-10T05:17:01.867 に答える