Вызов веб-сервиса .NET с Android с помощью KSOAP2 - PullRequest
1 голос
/ 27 марта 2012

Я пытался вызвать веб-сервис .NET с KSOAP2, и он выдает исключение на androidHttpTransport.call(SOAP_ACTION, envelope) и, следовательно, return result="m".

Что мне делать, чтобы она вызывала функцию?

Вот мой код:

public class LoginActivity extends Activity {

private static final String NAMESPACE = "http://tempuri.org/" ;
private static final String METHOD_NAME = "login";
private static final String SOAP_ACTION = NAMESPACE + METHOD_NAME;
private static final String URL = "http://192.168.8.2/CompiledWebSite/WebService.asmx";


private EditText et_id,et_pwd;
private Button btn_login;

public String login(String str_id, String str_pwd){
    String result ="a";
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("s_id", str_id);
    request.addProperty("pw", str_pwd);

    SoapSerializationEnvelope envelope =
    new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet =  true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try
    {

    androidHttpTransport.call(SOAP_ACTION, envelope);

    SoapPrimitive Result = (SoapPrimitive)envelope.getResponse();

    result = Result.toString();
    }
    catch(Exception e) 
    {
        result="m";
    }
    return result;          
}

 @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn_login = (Button) findViewById(R.id.BnLogin);
        et_id = (EditText) findViewById(R.id.ETStudentID);
        et_pwd = (EditText) findViewById(R.id.ETPassword);

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

                String str_id, str_pwd;
                str_id = et_id.getText().toString();
                str_pwd = et_pwd.getText().toString();

                if (login(str_id,str_pwd)=="true"){
                     Toast toast=Toast.makeText(LoginActivity.this, str_id, 500);
                     toast.setGravity(1, 1, 1);

                     toast.show();
                }else{
                     Toast toast=Toast.makeText(LoginActivity.this, login(str_id,str_pwd), 500);
                     toast.setGravity(1, 1, 1);

                     toast.show();
                }
            }


        });

    }


 }

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Я нашел решение. Я добавляю следующий код в AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

затем добавьте следующий код в onCreate ()

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()     
.detectDiskReads()     
.detectDiskWrites()     
.detectNetwork()   // or .detectAll() for all detectable problems     
.penaltyLog()     
.build());     
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()     
.detectLeakedSqlLiteObjects()     
.detectLeakedClosableObjects()     
.penaltyLog()     
.penaltyDeath()     
.build());
0 голосов
/ 28 марта 2012

Замените эту строку:

private static final String URL = "http://192.168.8.2/CompiledWebSite/WebService.asmx

на эту:

private static final String URL = "http://192.168.8.2/CompiledWebSite/WebService.asmx?wsdl";
...