Android uygulamasından Web servisine nasıl ulaşabilirim? Eklenti falan mı lazım? Aynı normal java daki gibi nasıl yapabilirim?

soruldu: 11 Tem '12, 07:05

emax_64's gravatar image

emax_64
64590102101
cevap kabul oranı: 20%


public class WebServisActivity extends Activity implements View.OnClickListener{

private Button cevirbutton;
RadioButton myOption1, myOption2;
private EditText valuText;
private EditText valuText2;
private TextView result;
final static String NAMESPACE = "http://ozdemir.ali.com";
final static String SERVICEURL = "http://127.0.0.1:9090/ServerApp/services/ServerClass?wsdl";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    cevirbutton = (Button) findViewById(R.id.btncevir);
    valuText = (EditText)findViewById(R.id.txtValue);
    valuText2 = (EditText)findViewById(R.id.txtValue2);
    result = (TextView)findViewById(R.id.lblResult);
    myOption1 = (RadioButton)findViewById(R.id.radio0);
    myOption2 = (RadioButton)findViewById(R.id.radio1);
    cevirbutton.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    if(myOption1.isChecked())
    {
        result.setText(String.valueOf(ToplamaSonucu()) );
    }
/*if (myOption2.isChecked()){
     result.setText(MerhabaSonucu());
}*/

}

public String ToplamaSonucu()
{
    String responseValue="";

    SoapObject request = new SoapObject(NAMESPACE, "Topla");
    request.addProperty("a",Double.parseDouble(valuText.getText().toString()));
    request.addProperty("b",Double.parseDouble(valuText2.getText().toString()));

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    soapEnvelope.dotNet = true;

    soapEnvelope.setOutputSoapObject(request);

    HttpTransportSE aht = new HttpTransportSE(SERVICEURL);
    try {
        aht.call("http://ozdemir.ali.com/Topla", soapEnvelope);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }
    try
    {
          responseValue = "Sonuç :"+(SoapPrimitive) soapEnvelope.getResponse();
    }catch (SoapFault e) {
            e.printStackTrace();
        }
        return responseValue;
}

Araştırmalarım sonucunda yukarıdaki gibi bir kod yazdım ancak bu kod veriyor. Tam da şu hatayı veriyor: java.lang.RuntimeException: Cannot serialize: 3.0 Ben kod kısmında şu iki yerde şüpheleniyorum. final static String NAMESPACE = "http://ozdemir.ali.com"; final static String SERVICEURL = "http://127.0.0.1:9090/ServerApp/services/ServerClass?wsdl"; Sizde ben nerde hata yapıyorum?

permanent link

cevaplandı: 11 Tem '12, 14:09

emax_64's gravatar image

emax_64
64590102101
cevap kabul oranı: 20%

Double parametreler doğrudan gönderilemiyor. Çözüm için buraya bakabilirsin: http://seesharpgears.blogspot.com/2010/11/implementing-ksoap-marshal-interface.html

(11 Tem '12, 14:24) OguzOzkeroglu OguzOzkeroglu's gravatar image

Double olan herşeyi şuan da Integer a dönüştürdüm ancak gene de aynı hatayı alıyorum.

(11 Tem '12, 14:34) emax_64 emax_64's gravatar image

Peki webservisi önce SoapUI ya da SoapSonar gibi bir SOAP istemcisi ile test ettin mi? Çalıştığına emin misin? Bu arada eğer double değerleri Integer yaptıysan Cannot serialize hatası almıyor olman gerekiyor.

(11 Tem '12, 14:41) OguzOzkeroglu OguzOzkeroglu's gravatar image

Ayrıca 127.0.0.1 ile kendi bilgisayarında test ettiğinde çalışıyor olsa bile Android üzerinden çalışmayacaktır. cmd -> ipconfig ile ip adresini öğrenip, Android tarafında yazdığın kodda bulunan url değerini ordaki ip ile değiştirmelisin.

(11 Tem '12, 14:44) OguzOzkeroglu OguzOzkeroglu's gravatar image

Ewet hata değişmiş. Yeni hata ise şu şekilde java.lang.NullPointerException

Evet bir tane Client ile server ı denedim bir sıkıntı yok. Hata uygulama bile yaptım java gui de.

(11 Tem '12, 14:45) emax_64 emax_64's gravatar image

Server daki şu metodu işletmek istiyorum sadece; public int Topla(int a,int b) { return a+b; }

(11 Tem '12, 14:47) emax_64 emax_64's gravatar image

Söylediğinizi denedim cmd->ipconfig dedim. Karşıma çıkan ekrandan Kablosuz Lan Bağdaştırıcısı Kablosuz ağ bağlantısı başlığı altındaki verilerden IPv4 kısmında yazan değer ile 127.0.0.1 i değiştirdim ancak halen aynı hatayı veriyor.Ancak şunu gözledim android aniden hata vermiyor 4 sn flan bekliyor daha sonra hata veriyor.Şimdi ne yapmalıyım?

(11 Tem '12, 15:00) emax_64 emax_64's gravatar image

Sorun çözüldü.Localhostda çalışanların çakışması.

(12 Tem '12, 07:17) emax_64 emax_64's gravatar image
8 yorumdan 5 tanesi gösteriliyor hepsini göster

Java'da kullanılan Axis ya da diğer araçlar Android'de maalesef ki çalışmıyor. Android'den webservislere ulaşmak için en çok kullanılan kütüphane ksoap2-android'dir. Kullanımı konusunda blogumda bir yazı yazmıştım: Android :: Ksoap2 Kullanarak Webservislere Erişme. Eğer ksoap2 kullanmak istemezseniz de SDK içinde bulunan DefaultHttpClient kullanılabilir. Onun için de aşağıdaki kod parçası örnek olabilir:

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);
permanent link

cevaplandı: 11 Tem '12, 12:19

OguzOzkeroglu's gravatar image

OguzOzkeroglu
2.5k32939
cevap kabul oranı: 40%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×90

Soruldu: 11 Tem '12, 07:05

Görüntüleme: 1,454 kez

Son güncelleme: 12 Tem '12, 07:17

powered by BitNami OSQA