ProgressDialog с WebService / InsertDB и загрузка файлов в AsyncTask - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь добавить ProgressDialog во время вызова веб-службы, вставки данных в базу данных и загрузки файлов

У меня есть имя класса Ws_Document, Ws_Participant, Ws_Rubrique, которое выполняет вызов веб-службы, с методом для вставки данных в базу данных и методом для импорта файлов.

Я называю эти классы основным видом деятельности в AsyncTask.

Я пытался найти ответ на похожие вопросы, но нет ..

Здесь Ws_Document, но для Ws_Participant и Ws_Rubrique все одинаково:

public void getWs(Context ctx) {
    ParticipantDbAdapter oPart_DbLog = new ParticipantDbAdapter(ctx);
    oPart_DbLog.open();
    oPart_DbLog.getAllParticipants();
    token = oPart_DbLog.getToken();
    oPart_DbLog.close();

    try {
        SoapObject request = new SoapObject(NAMESPACE, NAME_DOCUMENT);
        request.addProperty("sToken", token);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        androidHttpTransport.debug = true;
        androidHttpTransport.call(SOAP_ACTION, envelope);
        Log.d("test", androidHttpTransport.requestDump);
        Log.d("test", androidHttpTransport.responseDump);

        SoapObject result = (SoapObject) envelope.bodyIn;
        String resultData = result.getProperty(0).toString();
        System.out.println(resultData);

        JSONArray oJSonArray = new JSONArray(resultData);

        int total = oJSonArray.length();
        for (int i = 0; i < total; i++) {
            JSONObject row = oJSonArray.getJSONObject(i);
            Document oDoc = new Document();
            oDoc.setId(Integer.parseInt(row.getString("Id")));
            oDoc.setNom(row.getString("Nom"));
            sVignette = row.getString("Vignette");
            oDoc.setVisuel(sVignette);
            urlVignette = row.getString("sUrlVignette");
            oDoc.setRub_id(Integer.parseInt(row.getString("Rubrique")));
            oDoc.setOrdre(row.getInt("Ordre"));
            oDoc.setType(row.getString("Type"));
            sFichier = row.getString("Fichier");
            oDoc.setFichier(sFichier);
            urlFichier = row.getString("sUrlFichier");
            oDoc.setLan_code(row.getString("Langue"));
            oDoc.setPoids(Integer.parseInt(row.getString("Poids")));
            oDoc.setMotcle(row.getString("MotCle"));
            oDoc.setMea(row.getString("sMea"));
            //insertDoc(ctx, oDoc);

            if (sVignette != null)
                importDoc(sVignette, urlVignette);

            if (sFichier != null)
                importDoc(sFichier, urlFichier);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void insertDoc(Context ctx, Document document) {
    DocumentDbAdapter oDoc_DbAdapter = new DocumentDbAdapter(ctx);
    oDoc_DbAdapter.open();
    oDoc_DbAdapter.insertDoc(document);
    oDoc_DbAdapter.close();
}

private void importDoc(String file, String url) {
    try {
        if(file == sFichier)
            url = url +"&token=" + token;

        java.net.URL dlFrUrl = new java.net.URL(url);           
        long startTime = System.currentTimeMillis();
        Log.d("download begining", url);
        Log.d("downloaded file", file);

        HttpURLConnection urlConnextion = (HttpURLConnection) dlFrUrl.openConnection();
        urlConnextion.setRequestMethod("GET");
        urlConnextion.setDoOutput(true);
        urlConnextion.connect();

        File sdSaveFile = new File(Environment.getExternalStorageDirectory() + "/Doc");
        if (!sdSaveFile.exists()) {
            sdSaveFile.mkdir();
        }
        File oFile = new File(sdSaveFile, file);
        InputStream inputStream = urlConnextion.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        FileOutputStream fileOutput = new FileOutputStream(oFile);          

        byte[] buffer = new byte[1024];
        int bufferLength = 0;

        while (bufferLength != -1) {
            fileOutput.write(buffer, 0 , bufferLength); 
            bufferLength = bufferedInputStream.read(buffer, 0, 1024);
        }       

        fileOutput.close();
        Log.d("download ready in", ((System.currentTimeMillis() - startTime) / 1000)+ " sec");

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

В действии:

private class set_Login extends AsyncTask<Void, Integer, SoapObject> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }

    @Override
    protected SoapObject doInBackground(Void... arg0) {
        // TODO Auto-generated method stub

        Ws_Participant oGetWsPart = new Ws_Participant();
        Ws_Rubrique oGetWsRub = new Ws_Rubrique();
        Ws_Document oGetWsDoc = new Ws_Document();

        oGetWsPart.getWs(idOper, idDev, login, mot_de_passe, getApplicationContext());  
        oGetWsRub.getWs(getApplicationContext());
        oGetWsDoc.getWs(getApplicationContext());           
        return null;
    }

    @Override
    protected void onPostExecute(SoapObject result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);    
        startActivity(new Intent(PlugooplayActivity.this, MainMenuActivity.class));
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }
}

1 Ответ

0 голосов
/ 12 марта 2012

Если вы хотите обновить ProgressDialog, есть пять частей:

  1. Объявление диалогового окна прогресса в AsyncTaskClass:

    private class set_Login extends AsyncTask<Void, Integer, SoapObject> {
        ProgressDialog pd;
    
  2. Запустите его в onPreExceute:

    @Override
    protected void onPreExecute() {
        pd = new ProgressDialog(theContext);
        pd.setTitle(sometitle);
        pd.setMessage(someMessage);
        pd.show();
        super.onPreExecute();
    }    
    
  3. Опубликовать прогресс между шагами:

     @Override
    protected SoapObject doInBackground(Void... arg0) {
        // snip
    
        oGetWsPart.getWs(idOper, idDev, login, mot_de_passe, getApplicationContext()); 
        publishProgress(1); 
        oGetWsRub.getWs(getApplicationContext());
        publishProgress(2);
        oGetWsDoc.getWs(getApplicationContext());           
        publishProgress(3);
        // snap
        return null;
    }
    
  4. показать прогресс:

    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
        pd.setProgress(values[0]);
    }
    
  5. уволить, когда вы закончите:

    @Override
    protected void onPostExecute(SoapObject result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);    
        pd.dismiss();
        startActivity(new Intent(PlugooplayActivity.this, MainMenuActivity.class));
    }
    
...