2011-10-22 18 views
8

Son birkaç gündür, bir yerel web servisini çağırmak için bir Android kodu üzerinde çalışıyordum. .NET'te oluşturulan SOAP web hizmetimi çağırmak için Android için ksoap kitaplıklarını kullanıyorum. Ancak, benim app web hizmeti çağırdığınızda aldığım yanıt bir catch bloğu vurur gibi benim kodda yanlış bir şey olduğunu hissediyorum. Android kodumu hata ayıklamayı denedim, ancak hala sorunumu çözemiyorum. Lütfen birisinin bana neyin yanlış olduğunu ya da bunu yapmanın daha basit bir yolunu söyleyebilir misiniz? İşte Bir Android mobil uygulamasından yerel bir web servisi nasıl çağrılır

Bugüne dek benim Android kod uygulamış olduğu:

 package com.demo; 
     import java.net.SocketException; 
     import org.ksoap2.SoapEnvelope; 
     import org.ksoap2.serialization.SoapObject; 
     import org.ksoap2.serialization.SoapPrimitive; 
     import org.ksoap2.serialization.SoapSerializationEnvelope; 
     import org.ksoap2.transport.AndroidHttpTransport; 
     import android.app.Activity; 
     import android.app.ProgressDialog; 
     import android.os.AsyncTask; 
     import android.os.Bundle; 
     import android.util.Log; 
     import android.view.View; 
     import android.view.View.OnClickListener; 
     import android.widget.Button; 
     import android.widget.EditText; 

    public class Login extends Activity { 
private static final String SOAP_ACTION = "http://tempuri.org/GetLoginDetails"; 
    private static final String METHOD_NAME = "GetLoginDetails"; 
    private static final String NAMESPACE = "http://tempuri.org/"; 
    private static final String URL = "http://10.0.2.2/testlogin/Service1.asmx"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button signin = (Button) findViewById(R.id.regsubmitbtn); 

     signin.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 


         EditText etxt_user = (EditText) findViewById(R.id.usereditlog); 
         user_id = etxt_user.getText().toString(); 
         EditText etxt_password = (EditText) findViewById(R.id.pwdeditlog); 
         password = etxt_password.getText().toString(); 

         new LoginTask().execute(); 
       } 
     }); 
} 

String user_id; 
String password; 
String auth=null; 
private class LoginTask extends AsyncTask<Void, Void, Void> { 

    private final ProgressDialog dialog = new ProgressDialog(
        Login.this); 

    protected void onPreExecute() { 
      this.dialog.setMessage("Logging in..."); 
      this.dialog.show(); 
    } 

    protected Void doInBackground(final Void... unused) { 

      auth = doLogin("lalit", "lalit"); 
      return null; // don't interact with the ui! 
    } 

    protected void onPostExecute(Void result) { 
     if (this.dialog.isShowing()) { 
      this.dialog.dismiss(); 
     } 

     } 


     private String doLogin(String user_id, String password) { 

    SoapPrimitive resultstring = null; 
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    request.addProperty("user", user_id); 
    request.addProperty("password", password); 
    SoapSerializationEnvelope soapenvelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
    soapenvelope.dotNet = true;              
    soapenvelope.setOutputSoapObject(request); 

    AndroidHttpTransport httptransport = new AndroidHttpTransport(URL); 
    httptransport.debug = true; 

    try { 
      httptransport.call(SOAP_ACTION, soapenvelope); 
      resultstring = (SoapPrimitive) soapenvelope.getResponse(); 
      //Log.d("Authenticaion", resultstring+""); 
      System.out.println(resultstring); 


    } 
    catch (SocketException ex) { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage()); 
     ex.printStackTrace(); 
    } catch (Exception e) { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage()); 
     e.printStackTrace(); 
    } 
    return resultstring+""; 

    } 
    } 
    } 

benim web hizmeti kodu:

 using System; 
     using System.Collections; 
     using System.ComponentModel; 
     using System.Data; 
     using System.Linq; 
     using System.Web; 
     using System.Web.Services; 
     using System.Web.Services.Protocols; 
     using System.Xml.Linq; 
     using System.Data.SqlClient; 

    namespace LoginDetails 
    { 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [ToolboxItem(false)] 
// [System.Web.Script.Services.ScriptService] 
    public class Service1 : System.Web.Services.WebService 
    { 


    [WebMethod] 
    public String GetLoginDetails(string UserName, string Password) 
    { 

    try 
     { 
    using (SqlConnection myConnection = new SqlConnection(@"Data Source= .\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=demo")) 
    { 
     myConnection.Open(); 

     using (SqlCommand myCommand = new SqlCommand()) 
     { 
      myCommand.Connection = myConnection; 
      myCommand.CommandText = "SELECT COUNT(*) FROM Login WHERE UserName = @UserName AND Password = @Password"; 
      myCommand.Parameters.Add("@UserName", SqlDbType.VarChar).Value = UserName; 
      myCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = Password; 
      return (int)myCommand.ExecuteScalar() == 1 ? "success" : "bad username or password"; 
     } 
    } 
} 
catch (Exception ex) 
    { 
    Console.WriteLine(ex.Message); 
    return "an error occurred."; 
    } 

    } 

    } 


    } 

benim logcat:

 10-22 21:49:17.635: DEBUG/dalvikvm(117): GC_EXTERNAL_ALLOC freed 901 objects/  

     10-22 21:49:18.015: WARN/KeyCharacterMap(117): No keyboard for id 0 
     10-22 21:49:18.015: WARN/KeyCharacterMap(117): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
     10-22 21:49:22.275: INFO/ARMAssembler(58): generated s scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x23df98:0x23e054] in 675711 ns 
     10-22 21:49:42.025: INFO/System.out(274): an error occurred. 
     10-22 21:49:42.045: WARN/InputManagerService(58): Window already focused, ignoring focus gain of: [email protected] 

my output during web service call

cevap

6

Çalışma zekâ h kSOAP2 zorlu olabilir ... biliyorum. Ama bu iyi bir kütüphanedir ve onu işe alabiliyorum. Android'de kSOAP2 ile çalışmaya biraz yazdım. Basit ve karmaşık parametreleri geçmek, diziler almak ve JDBC WebRowSet nesnelerle tel üzerinden çalışmaktan bahsediyorum. sitede kSOAP2 çalışma hakkında diğer blog makaleleri bulunmaktadır

http://roderickbarnes.com/blog/droid-chronicles-web-services-handling-complex-parameters

bulunmaktadır. Umarım bu yardımcı olur.

+0

ur yanıt için u çok teşekkür ederim !! Evet ben ur link çalışacağım ve eğer benim için çalışıyorsa knww izin vereceğim! :-) –

9

Bir şekilde benim sorunumu çözmeyi başardım ve bu soruyu yanıtlıyorum, böylece bu gönderiyi gelecekte görecek kişiler için yararlı olabilir.

Yani burada modifiye kodudur:

   package com.demo; 
      import java.net.SocketException; 
      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.util.Log; 
      import android.view.View; 
      import android.view.View.OnClickListener; 
      import android.widget.Button; 
      import android.widget.EditText; 

    public class Login extends Activity { 

    private final String NAMESPACE = "http://tempuri.org/"; 
    private final String URL = "http://10.0.2.2/testlogin/Service1.asmx"; 

    String user_id; 
    String password; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
     { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button signin = (Button) findViewById(R.id.regsubmitbtn); 
     signin.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 


         EditText etxt_user = (EditText) findViewById(R.id.usereditlog); 
         user_id = etxt_user.getText().toString(); 
         EditText etxt_password = (EditText) findViewById(R.id.pwdeditlog); 
         password = etxt_password.getText().toString(); 

         new LoginTask().execute(); 

       } 
      }); 
    } 

    private boolean doLogin(String user_id, String password) { 

    boolean result=false; 
    final String SOAP_ACTION = "http://tempuri.org/GetLogin"; 
    final String METHOD_NAME = "GetLogin";  
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    request.addProperty("userid", user_id); 
    request.addProperty("password",password); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; // Set this variable to true for 
                  // compatibility with what seems to be the 
                  // default encoding for .Net-Services. 
    envelope.setOutputSoapObject(request); 

    System.out.println(request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 


    try { 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
      Log.i("myApp", response.toString()); 
      System.out.println("response" +response); 

        if(response.toString().equalsIgnoreCase("success")) 
     { 
        result = true; 

     } 

    }catch(SocketException ex) 
    { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage()); 
     ex.printStackTrace(); 
    } 
    catch (Exception e) { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage()); 
      e.printStackTrace(); 
    } 
    return result; 

    } 


private class LoginTask extends AsyncTask<Void, Void, Void> { 

    private final ProgressDialog dialog = new ProgressDialog(
        Login.this); 

    protected void onPreExecute() { 

      this.dialog.setMessage("Logging in..."); 
      this.dialog.show(); 

    } 


    protected Void doInBackground(final Void... unused) { 

     boolean auth=doLogin(user_id,password); 
     System.out.println(auth); 

     return null;// don't interact with the ui! 
    } 


    protected void onPostExecute(Void result) { 


      if (this.dialog.isShowing()) { 
      this.dialog.dismiss(); 
     }   
     } 

    } 

    } 
+0

hey frnd ur yukarıdaki kodu alma hatası this.dialog.show(); ve yeni LoginTask(). execute(); Bu iki hat ... –

+0

'u nasıl çözebilirim Çok teşekkür ederim! =) –

İlgili konular