0

ワークフローのプロセスに応じて、1 つのアクティビティで 3 つのビューを作成しました。つまり、viewA->viewB->viewC、次に viewC で、(AsyncTask を使用して) HTTP-POST を実行すると、進行状況ダイアログが表示されます。進行状況ダイアログを表示する2つの方法を試しました:

  1. runOnUiThread() を使用して progressDialog を表示すると、表示されませんでした。
  2. AsyncTask に show progressDialog コードを記述します。onPreExecute() で進行状況ダイアログを表示し、onPostExecute() で閉じると、doinbackground タスクの後に表示され、onPostExecute() も実行されませんでした。

誰でも助けることができますか?

ありがとう

サム

主なアクティビティ コードは次のとおりです。

 public void setA(){
    setContentView(R.layout.a_fm);
    Button aNextBtn=(Button)findViewById(R.id.aNextBtn);
    aNextBtn.setOnClickListener(this);
 }
 public void setB(){
    setContentView(R.layout.b_fm);
    Button bNextBtn=(Button)findViewById(R.id.bNextBtn);
    bNextBtn.setOnClickListener(this);
 }
 public void setC(){
    setContentView(R.layout.c_fm);
    Button cNextBtn=(Button)findViewById(R.id.cNextBtn);
    cNextBtn.setOnClickListener(this);
}
   public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.aNextBtn:
                setB();
                break;
    case R.id.bNextBtn:
                setB();
                break;
    case R.id.cNextBtn:
                postmsg();
                break;
       }
    }
    public void postmsg(final Info info)
{
    postDialog=new ProgressDialog(AssistFm.this);
    postDialog.setMessage(getString(R.string.alert_sendmsg_sending));
    postDialog.show();
    this.runOnUiThread(new Runnable() {@Override
        public void run() {
            // TODO Auto-generated method stub
            send_online=sendlogtowebservice(info);
            SEND_COUNT++;
            if (send_online)
            {
                postDialog.dismiss();
                AlertDialog.Builder builder = new Builder(A_activity.this);
                builder.setMessage(getString(R.string.alert_sendmsg_success));  
                builder.setTitle(getString(R.string.sendmsg_title)); 
                builder.setPositiveButton(getString(R.string.button_OK), new DialogInterface.OnClickListener() {   
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();           
                        setA();
                        SEND_COUNT=0;
                    }
                });
                builder.create().show();    
            }
            else 
            {  
                postDialog.dismiss();
                if (SEND_COUNT<SEND_COUNT_MAX)
                {
                    AlertDialog.Builder builder = new Builder(A_activity.this);
                    builder.setMessage(getString(R.string.alert_sendmsg_retry));  
                    builder.setTitle(getString(R.string.sendmsg_title)); 
                    builder.setNegativeButton(getString(R.string.button_Cancel), new DialogInterface.OnClickListener() {   
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();       
                        }
                    });

                    builder.setPositiveButton(getString(R.string.button_OK), new DialogInterface.OnClickListener() {   
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            postmsg(info);
                            SEND_COUNT++;
                        }
                    });
                    builder.create().show();
                }
                else 
                {
                    AlertDialog.Builder builder = new Builder(AssistFm.this);
                    builder.setMessage(getString(R.string.alert_sendmsg_error));  
                    builder.setTitle(getString(R.string.sendmsg_title)); 

                    builder.setPositiveButton(getString(R.string.button_OK), new DialogInterface.OnClickListener() {   
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            setA();
                        }
                    });
                    builder.create().show();
                }
            }
        }
    });

 }
 private boolean sendlogtowebservice(Info info) {
    boolean isTrue = false;
    int result_code = 0;
    Object []param = new Object[3];  
    HttpResponse response = null;    
    String result_str;
    try {   
        String sURL=url;
        HttpClient client = new DefaultHttpClient();        
        ArrayList<BasicNameValuePair> paierList = new ArrayList<BasicNameValuePair>();
        paierList.add(new BasicNameValuePair("person_firstname", info.person_firstname)); 
        paierList.add(new BasicNameValuePair("person_lastname", info.person_lastname)); 
        paierList.add(new BasicNameValuePair("person_mobile", info.person_mobile)); 

        param[0] = sURL;  
        param[1] = paierList;  
        param[2] = client;  
        AsyncTask<Object, Object, HttpResponse> res  = new HttpReqTask().execute(param);
        response = (HttpResponse) res.get();  
        result_code=response.getStatusLine().getStatusCode();
        result_str = EntityUtils.toString(response.getEntity());
        if ( result_str.equals("00"))
        {
            isTrue = true;
        }
    } 
    catch (ClientProtocolException  e) {
        e.printStackTrace();
    }
    catch (IOException e) 
    { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
    } 
    catch (Exception e) 
    {  
        Log.e("HttpAPI.callHttpPost()", "Error", e);  
    }  
    return isTrue;

};

HTTP-POST AsyncTask コードは次のとおりです。

 import java.util.ArrayList;

 import org.apache.http.HttpResponse;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.protocol.HTTP;

 import android.os.AsyncTask;


 public class HttpReqTask extends AsyncTask<Object, Object, HttpResponse>{

  @Override  
  protected HttpResponse doInBackground(Object... params){  
    String url = (String)params[0];  
    ArrayList<NameValuePair> paierList  = (ArrayList<NameValuePair>)params[1];  
    HttpClient httpclient  = (HttpClient)params[2];  

    HttpPost request = new HttpPost(url);  
    HttpResponse response = null;  
     try {  
        request.setEntity(new UrlEncodedFormEntity(paierList, HTTP.UTF_8));  
        response = httpclient.execute(request);  
    } catch (Exception e) {  
        throw new RuntimeException(e);  
    }  
    return response;  
}  

 }  
4

2 に答える 2

0

これがどのように起こったのか誰も知りませんか?

AsyncTask を以下に変更しました。進行状況ダイアログを閉じようとすると、進行状況ダイアログにフラッシュが表示されます。

public class HttpReqTask extends AsyncTask<Object, Object, HttpResponse>{
private Context mCtx;
private ProgressDialog progressDialog;

public HttpReqTask(Context  context){     
    myLog.i("HttpReqTask constructor, before show dialog!");  
            progressDialog = new ProgressDialog(mCtx);
    progressDialog.setMessage("Your progress dialog message...");
            progressDialog.show();  
            myLog.i("HttpReqTask constructor finish, start show dialog!");  
}

@Override  
protected HttpResponse doInBackground(Object... params){  
    myLog.i("do in background execute");  
    String url = (String)params[0];  
    ArrayList<NameValuePair> paierList  = (ArrayList<NameValuePair>)params[1];  
    HttpClient httpclient  = (HttpClient)params[2];  
    String s=null;  
    HttpPost request = new HttpPost(url);  
    HttpResponse response = null;  
     try {  
        request.setEntity(new UrlEncodedFormEntity(paierList, HTTP.UTF_8));  
        response = httpclient.execute(request); 
        //add for longer process time.
        for (int i=0;i<10000000;i++)
        {
            s="a";
        }
    } catch (Exception e) {  
        throw new RuntimeException(e);  
    }  
     myLog.i("finish in background execute");  
    return response;  
}  

@Override    
protected void onPostExecute(HttpResponse result) {     
    myLog.i("HttpReqTask onPostExecute(), before dismiss dialog!");  
    if (progressDialog!=null) progressDialog.dismiss();      
    myLog.i("HttpReqTask onPostExecute(), after dismiss dialog!");  
}      

}

于 2013-08-07T15:28:32.643 に答える