Android Webservice Sorunu
-
Selam müridler,
yapmak istediğim şey aslında çok basit lakin çözemedim. Bir webservice e parametre gönderip dönen sonucu bir textview de göstermek istiyorum. Kodlar aşağıdaki gibi. Yükleniyor diyor ve hiç birşey yapmadan kalıyor.. Bi el atın androidciler..
package tr.test.test; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class VesselSearchActivity extends Activity { private final String NAMESPACE = "http://tempuri.org/"; private final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit"; private final String METHOD_NAME = "CelsiusToFahrenheit"; private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.vessel_search_layout); Button btnVesselSearch = (Button)findViewById(R.id.btnVesselSearch); btnVesselSearch.setOnClickListener(getVessel); } private OnClickListener getVessel = new OnClickListener() { @Override public void onClick(View v) { tv = (TextView)findViewById(R.id.txtVessel); tv.setText("rappermcs"); new asyncTask().execute(); } }; public class asyncTask extends AsyncTask<Void, Void, Void> { ProgressDialog dialog; public asyncTask() { dialog = new ProgressDialog(VesselSearchActivity.this); tv.setText("constructor çalıştı"); } protected void onPreExecute() { tv.setText("onPreExecute çalıştı"); super.onPreExecute(); dialog.setMessage("Yükleniyor.."); dialog.show(); } @Override protected Void doInBackground(Void... params) { tv = (TextView)findViewById(R.id.txtVessel); ed = (EditText)findViewById(R.id.eVessel); SoapObject Request = new SoapObject(NAMESPACE,METHOD_NAME); Request.addProperty("vesselName","10"); //ed.getText().toString() SoapSerializationEnvelope sse = new SoapSerializationEnvelope(SoapEnvelope.VER12); sse.dotNet = true; sse.setOutputSoapObject(Request); HttpTransportSE aht = new HttpTransportSE(URL); try { aht.call(SOAP_ACTION, sse); @SuppressWarnings("unused") SoapPrimitive resultString = (SoapPrimitive)sse.getResponse(); //tv.setText(resultString.toString()); tv.setText("TBT"); } catch (Exception e) { tv.setText(e.getMessage()); } return null; } protected void onPostExecute(String test) { tv.setText("onPostExecute çalıştı"); dialog.dismiss(); dialog.cancel(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }VesselListSearch butonuna bastığımda Sonuç yerine webservisten dönen değeri yazması lazım lakin böyle kalıyor. En son onPreExecute çalışıyor..

-
Androidci müridler neredeler :)
Beyler takıldığınız android forumlarınıda önerebilirsiniz :)
-
doInBackground içinde UI işlemleri yapmamalısın. O metodun içinde sadece webservis çağrısı olması lazım, sende biraz daha fazlası var. UI update işlerini onPostExecute içinde yapmalısın.
-
JPriest bunu yazdı
doInBackground içinde UI işlemleri yapmamalısın. O metodun içinde sadece webservis çağrısı olması lazım, sende biraz daha fazlası var. UI update işlerini onPostExecute içinde yapmalısın.
oapPrimitive resultString = (SoapPrimitive)sse.getResponse();
hocam result stringi geriye döndürdüğümde onPostExecute e mi gelecek UI işlemlerini bu şekilde mi yapmalıyım?
-
Hocam logcat a baktınmı hiç orda hata veriyor mu birşey diye?Ayrıca
programın force close hatası vermediyse muhtemelen şu satıra gelmemiştir diye düşünüyorum
tv.setText("TBT"); -
OnLyGoDCaNStoPMe bunu yazdı
Hocam logcat a baktınmı hiç orda hata veriyor mu birşey diye?Ayrıca
programın force close hatası vermediyse muhtemelen şu satıra gelmemiştir diye düşünüyorum
tv.setText("TBT");hocam logcat de sürekli unexpected basıyor ve yine yükleniyor da kalıyor.
Android de bir webservice e parametre gönderip JSON sonucu parse etmek bu kadar mı zor olur arkadaş :) İnternette zilyon tane örnek var hepsi eski versiyonlar için.

-
Burda JSON değil SOAP parse etmen gerekiyor. JSON için Restful webservis olmalı ama senin servisi SOAP servis.
tv.setText("TBT");vetv.setText(e.getMessage());satırlarını System.out.println("tbt"); ya da log.i("tbt"); ile değiştir, logcat'den takip et bakalım..
-
JPriest bunu yazdı
Burda JSON değil SOAP parse etmen gerekiyor. JSON için Restful webservis olmalı ama senin servisi SOAP servis.
tv.setText("TBT");vetv.setText(e.getMessage());satırlarını System.out.println("tbt"); ya da log.i("tbt"); ile değiştir, logcat'den takip et bakalım..
Hocam çok güzel bir fikir verdin bana saolasın. :) doInBackGround içini adım adım taradım ve sonuç olarak SOAPPRIMITIVE tipinde veriyi string olarak onPostExecute e gönderip UI da yazdırabiliyorum.
protected String doInBackground(String... params) { SoapObject Request = new SoapObject(NAMESPACE,METHOD_NAME); Log.i("REQUeST",Request.toString()); Request.addProperty("Celsius","10"); //ed.getText().toString() SoapSerializationEnvelope sse = new SoapSerializationEnvelope(SoapEnvelope.VER11); Log.i("SSE", sse.toString()); sse.dotNet = true; sse.setOutputSoapObject(Request); HttpTransportSE aht = new HttpTransportSE(URL); Log.i("AHT", aht.toString()); aht.debug = true; //String resultString = null; try { aht.call(SOAP_ACTION, sse); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } SoapPrimitive soaPrimitive = null; try { soaPrimitive = (SoapPrimitive)sse.getResponse(); Log.i("SOA", soaPrimitive.toString()); } catch (SoapFault e) { // TODO Auto-generated catch block e.printStackTrace(); } return soaPrimitive.toString(); }
