如何在一个活动中显示进度条并在另一个活动中获取肥皂响应

时间:2015-05-20 17:23:29

标签: android

我是android的新手。我正在使用网络服务获取要在app中显示的数据。我正在显示进度条。我在这里阅读了类似的帖子,其中说在后台方法中无法更新数据,但我仍然会遇到同样的错误。

主要问题是我在一个活动中有按钮(屏幕只有按钮并点击每个按钮,调用一个独特的Web服务),点击该按钮后,它将移动到另一个活动,其中呈现Web服务响应

这是我的代码:

public class DummyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dummy);
       new SoapAccessTask().execute(null,null,null);
    }
    private class SoapAccessTask extends AsyncTask<String, Void, String> {
        ProgressDialog pd = null;
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
super.onPreExecute();
            pd = ProgressDialog.show(DummyActivity.this,"","Loading...");
            pd.setCancelable(true);


        }

        @Override
        protected String doInBackground(String... urls) {

            final String NAMESPACE = "http://xxxx/";

            final String METHOD_NAME = "getStockReportDetails";
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            final String URL = "xxxxxx?wsdl";
            String fp_shop;
            SoapSerializationEnvelope soapPackage = new SoapSerializationEnvelope(12);
            HttpTransportSE http = new HttpTransportSE(URL);

            Vector<SoapObject> rs = null;
            try {


                fp_shop = "12345";

                PropertyInfo pack = new PropertyInfo();
                pack.setName("shop_no");
                pack.setValue(fp_shop);

                request.addProperty(pack);
                soapPackage.setOutputSoapObject(request);


                http.call(NAMESPACE, soapPackage); 
                //SoapObject req = (SoapObject) soapPackage.bodyOut;
                pd.setMessage("Fetching Details from the Server....");
                System.out.println("request contents : " + request.toString());
                rs = (Vector<SoapObject>) soapPackage.getResponse();
                System.out.println("response from the server : " + rs);

            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Cannot access the web service" + e.toString(), Toast.LENGTH_LONG).show();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            pd.dismiss();

        }

    }

}
`

我收到了这个错误,我尝试了各种各样的方法,例如更改返回类型和重新定位方法。

  

android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。

  

活动com.epolicing.DummyActivity泄露了最初添加的窗口com.android.internal.policy.impl.PhoneWindow$DecorView@40555c68   01-20 19:36:53.685:E / WindowManager(1191):android.view.WindowLeaked:DummyActivity泄露了最初添加的窗口com.android.internal.policy.impl.PhoneWindow$DecorView@40555c68

1 个答案:

答案 0 :(得分:1)

  

主要问题是我在一个活动中有按钮(屏幕有   只有按钮并点击每个按钮,一个独特的网络服务   在点击该按钮时,它正在转移到另一个活动   提供Web服务响应的位置。

在解除进度对话框后,放置代码以在AsyncTask的onPostExecute()中启动另一个活动。

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    pd.dismiss();

   // Your code for start second activity goes here

}

同时从Toast中的 catch block 中删除doInBackground()