Я разрабатываю приложение для Android, которое использует веб-службу, вывод службы - XML
Я подключаюсь к веб-сервису, используя этот код
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 дней с моей благодарностью заранее.
Примечание: эта проблема часто возникает при первом подключении приложения к службе, после чего, если я нажму кнопку ожидания и приложение продолжит работу, все другие действия, использующие веб-службу, будут работать нормально