1

データベースの更新中に進行状況バーを使用しようとしています。データベースを正常に更新できましたが、進行状況バーが表示されません。私は進行状況バーを使用しており、更新のパーセンテージも表示されます。以下のコードの何が問題なのかわからないので、それを理解するのを手伝ってください:

public class SyncBrand extends AsyncTask<String, Void, Boolean>
{
    public static final int BRAND_DIALOG_DOWNLOAD_PROGRESS = 0;

public SyncBrand(Context context, String _username, String _password, String _code,String _remarks,String _date,String _province,String _infotype,
        String _competitor,ArrayList<String> _brands, ArrayList<String> _segments) 
{
    ....
}

protected Dialog onCreateDialog(int id) {
    switch (id) {
    case BRAND_DIALOG_DOWNLOAD_PROGRESS:
        progressDialog = new ProgressDialog(mContext);
        progressDialog.setMessage("Updating Sub Brands..");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setCancelable(false);
        progressDialog.show();
        return progressDialog;
    default:
        return null;
    }
}

@SuppressWarnings("deprecation")
protected void onPreExecute() 
{     
    super.onPreExecute();
    ((Activity) mContext).showDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS);
}

protected Boolean doInBackground(String... arg0) 
{
    try{
        ....

    }catch (Exception e){
        Log.e("Update SubBrand", "Error:", e);
        exception = e;
        return false;
        }
    ....

    return true;
}

protected void onProgressUpdate(String... progress) {
    Log.d("ANDRO_ASYNC",progress[0]);
    progressDialog.setProgress(Integer.parseInt(progress[0]));

}

@SuppressWarnings("deprecation")
protected void onPostExecute(Boolean valid)
{

    ((Activity) mContext).removeDialog(BRAND_DIALOG_DOWNLOAD_PROGRESS);
    if(valid){

        .....

    }else{
        Toast.makeText(mContext, "Failed to update.Please try again.", Toast.LENGTH_SHORT).show();
        mContext.startActivity(new Intent(mContext, S_2nd_Main.class));
    }
}

}

4

1 に答える 1

1

ここにいくつかの問題があります。あなたはあなたVoidの2番目の引数を持っていますAsyncTask

public class SyncBrand extends AsyncTask<String, Void, Boolean>

つまり、onProgressUpdate()そのタイプのデータが渡されることを期待する必要がありますがprotected void onProgressUpdate(String... progress) {、そのメソッドにパラメーターを取るように指示する必要がありStringます。また、 which を呼び出すのに使用されるものを呼び出すことはありpublishProgress()ません。doInBackground()onProgressUpdate()

に変更AsyncTaskします

public class SyncBrand extends AsyncTask<String, String, Boolean>

に追加publishProgress()して、更新したい値をdoInBackground()渡します。StringProgressDialog

于 2013-09-30T02:37:26.827 に答える