Android Webservice Sorunu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    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..

     


    Paslanmış bir uygulama geliştirici.. ##
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    Androidci müridler neredeler :)

    Beyler takıldığınız android forumlarınıda önerebilirsiniz :)


    Paslanmış bir uygulama geliştirici.. ##
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    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.


    Sen hiç kaval çaldın mı?
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    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?


    Paslanmış bir uygulama geliştirici.. ##
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    OnLyGoDCaNStoPMe
    OnLyGoDCaNStoPMe's avatar
    Kayıt Tarihi: 24/Mart/2010
    Erkek

    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");

     

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    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.

     


    Paslanmış bir uygulama geliştirici.. ##
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JPriest
    JPriest's avatar
    Kayıt Tarihi: 09/Mart/2007
    Erkek

    Burda JSON değil SOAP parse etmen gerekiyor. JSON için Restful webservis olmalı ama senin servisi SOAP servis.

    tv.setText("TBT");

    ve

    tv.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..

     


    Sen hiç kaval çaldın mı?
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek
    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");

    ve

    tv.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();
            }   
    
    

    Paslanmış bir uygulama geliştirici.. ##
Toplam Hit: 1560 Toplam Mesaj: 8