14 июн. 2017 г.

Подключиться к веб-сервису с Android

  • Качаем ksoap2.
  • В build.gradle пишем
dependencies {
...
repositories {
    maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
}
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'
...
}
  • В манифест добавляем
<uses-permission android:name="android.permission.INTERNET" />
  • Главный класс выглядит так
package com.example.jaroslavh.ws1;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.ksoap2.HeaderProperty;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final String NAMESPACE = "http://www.w3.org/2001/XMLSchema";
    private static final String METHOD_NAME = "echo"; //метод веб-сервиса
    private static final String SOAP_ACTION = "tns:swtrade-wms#wms_tcd:echo"; // берем из xml страницы веб-сервиса
    private static String URL = "http://192.168.0.96/veres/uk_UA/ws/wms_tcd"; //  адрес веб-сервиса
    
    private TextView tv;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.TextView); // на форме поле вывода
        btn = (Button) findViewById(R.id.button); // на форме кнопка

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                new MyTask().execute();
            }

        });

    }

    public class MyTask extends AsyncTask<Void, Void, String> {

        ProgressDialog progress;
        String response = "";

        public void onPreExecute() {

            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... arg0) {

            final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("text", "jaroslav"); // веб-сервис принимает один параметр text в виде строки

            final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;

            try {

                List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
                headerList.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("admin:123".getBytes()))); // авторизация на веб-сервисе

                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                androidHttpTransport.call(SOAP_ACTION, envelope, headerList);

                SoapObject result = (SoapObject) envelope.getResponse();
                response = result.toString();

            } catch (IOException e) {
                response = e.toString();
            } catch (XmlPullParserException e) {
                response = e.toString();
            }

            return response;
        }

        @Override
        public void onPostExecute(String res) {

            if (!(res.equalsIgnoreCase(""))) {
                tv.setText(res);
            }

        }
    }

}
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07