2012-05-05 52 views
1

我有一个简单的android应用程序来访问一个web服务。我想显示一个对话框"Loading . . .",直到加载结果后加载和解除结果。我已使用此代码,但未显示加载消息:如何添加“正在加载...”对话框到Android应用程序

public class LoadingActivity extends Activity { 
    private static final String SOAP_ACTION = "http://ws.eretailer.com/"; 
    private static final String METHOD_NAME = "dataSender"; 
    private static final String NAMESPACE = "http://ws.eretailer.com/dataSender/"; 
    private static final String URL = "http://175.157.128.207:8085/Eretailer/services/EretailerService?wsdl"; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    final ProgressDialog pd = new ProgressDialog(this); 
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    pd.setMessage("Loading. . ."); 
    pd.show(); 
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);   

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

    envelope.setOutputSoapObject(request); 
    pd.show(); 
    HttpTransportSE ht = new HttpTransportSE(URL); 
    try { 

     ht.call(SOAP_ACTION, envelope); 
     SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
     SoapPrimitive s = response; 

     pd.dismiss(); 
      String str = s.toString(); 
      String arr1[] = str.split(" "); 

      TextView tv = new TextView(this); 

      for(int i = 0; i<arr1.length;i++){ 
      tv.append("order ID :"+arr1[i]+"\n"); 
      } 
      setContentView(tv); 

     } catch (Exception e) { 

      e.printStackTrace(); 
     } 
} 
} 

如何更正此问题?

+0

如果'ht.call('阻塞,你应该在不同的线程运行此阻塞'onCreate'会影响反应能力和它似乎可能会阻止对话框出现 –

回答

2

嗨尝试如下代码

private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected void onPreExecute() { 
     pd.show(); 
     super.onPreExecute(); 
    } 
    @Override 
    protected String doInBackground(String... urls) { 
     String response = ""; 
     HttpTransportSE ht = new HttpTransportSE(URL); 
      try { 

       ht.call(SOAP_ACTION, envelope); 
       SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
       SoapPrimitive s = response; 

       pd.dismiss(); 
        String str = s.toString(); 
        String arr1[] = str.split(" "); 

        TextView tv = new TextView(this); 

        for(int i = 0; i<arr1.length;i++){ 
        tv.append("order ID :"+arr1[i]+"\n"); 
        } 
        setContentView(tv); 

       } catch (Exception e) { 

        e.printStackTrace(); 
       } 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     pd.dismiss(); 
    } 
} 

资源:http://www.vogella.com/articles/AndroidPerformance/article.html

+0

此代码只是为了给出一个想法如何使用AsyncTask以及它可能不是这个代码可能不是确切的,你希望你必须改变一些部分 –

0

首先注释pd.dismiss()首先检查它的加载是否到来,然后在下载完成后使用pd.dismiss()。

1

更好地使用Android-AsyncTask您的网络请求。并开始的AsyncTask并关闭它在onPostExecute()(更新你的用户界面这里为Web响应的结果)。同时将Web Request请求代码放入AsyncTask的doInBackGround() ..

例如,查看Android AsyncTask Example

这永远不会阻止您的Main-UI线程。更好的用户体验性能。

相关问题