我是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
答案 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()
。