Webサービスを使用するAndroidアプリケーションを開発しています。サービス出力はXMLです。
このコードを使用してWebサービスに接続しています
public String converse(String host, int port, String path)
throws IOException, URISyntaxException {
BufferedReader in = null;
String serviceResponse = null ;
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
String serviceUrl = "http://"+host+":"+port+path;
System.out.println("service url "+serviceUrl);
request.setURI(new URI(serviceUrl));
System.out.println("Request "+request.toString());
HttpResponse response = client.execute(request);
in = new BufferedReader
(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
serviceResponse = sb.toString();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return serviceResponse;
}
アプリケーションがWI-FIで起動すると、すべてが正常に機能し、3G接続でアプリケーションを再起動すると、アプリケーションがハングして次のダイアログが表示されます。
このコードに加えて、私は別のメソッド内でこのメソッドを使用しています
public void fillAdapter() {
//calling web service using the mentioned method
}
そして、この関数は、ListViewアダプターを埋めるために非同期タスク内で使用されます
protected class AsyncLoading extends AsyncTask<Void,Void, BaseModel[]>{
@Override
protected void onPreExecute(){
pd =ProgressDialog.show(BaseListActivity.this, "loading in progress", "waiting .");
}
@Override
protected BaseModel[] doInBackground(Void... params) {
fillAdapter();
return listItems;
}
@Override
protected void onPostExecute(BaseModel[] doc){
//list.setAdapter(doc);
if(doc != null) {
if(doc.length > 0 ) {
if(doc[0] instanceof Activity)
adapter = new OffersListAdapter(getApplicationContext(),doc);
else if (doc[0] instanceof Offer)
adapter = new OffersListAdapter(getApplicationContext(),doc);
else if (doc[0] instanceof Branch) {
adapter = new BranchListAdapter(getApplicationContext(),doc);
Log.i("Branch"," Added Branch");
}else if (doc[0] instanceof Consolation) {
adapter = new ListAdapter(getApplicationContext(),doc);
adapter.setDisplayImage(false);
}else if ( doc[0] instanceof Event) {
adapter = new EventListAdapter(getApplicationContext(),doc);
}
else
adapter = new ListAdapter(getApplicationContext(),doc);
}//end if doc != null
list.setAdapter(adapter);
}
handler.sendEmptyMessage(0);
}
この投稿を見まし たが、良い結果が得られませんでした。この問題に2日間取り組んでおり、事前に感謝しています。
注:この問題は、アプリケーションがサービスに初めて接続したときによく発生します。その後、待機を押してアプリケーションを続行すると、Webサービスを使用する他のすべてのアクティビティが正常に機能します。