当前位置: 首页 > 知识库问答 >
问题:

如何将本地主机SOAP Web服务连接到我的android

越源
2023-03-14

我正在webservice上工作,我对webservice没有任何想法。我看起来相同的示例网络服务(如实时SOAP服务)它工作正常。我要在localhost运行网络服务,我不知道我的网址、命名空间和方法名称是否被正确声明。

下面的代码是我的WSDL代码

<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"   
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xs0="http://www.processmaker.com"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"   
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
targetNamespace="http://www.processmaker.com">
<types>
<xs:schema elementFormDefault="qualified"     
targetNamespace="http://www.processmaker.com">
<xs:element name="login">
<xs:complexType>
<xs:sequence>
<xs:element name="userid" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</definitions>

调用上述服务的我的android代码:

public class MainActivity extends Activity {
String str = null;
private static final String SOAP_ACTION = "http://www.processmaker.com/Login";
private static final String METHOD_NAME = "Login";
private static final String NAMESPACE = "http://www.processmaker.com/";
private static final String URL = "http://192.168.1.5/sysworkflow/en/neoclassic/setup/main";
SoapObject request;
TextView tv;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    setContentView(R.layout.activity_main);

    tv = (TextView) findViewById(R.id.textView1);


    DownloadWebPageTask task = new DownloadWebPageTask();
    task.execute();
}


private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String response = "";

        try {
            request = new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo weightProp = new PropertyInfo();
            weightProp.setName("USER_ID");
            weightProp.setValue("admin");
            weightProp.setType(String.class);
            request.addProperty(weightProp);

            PropertyInfo fromProp = new PropertyInfo();
            fromProp.setName("PASSWORD");
            fromProp.setValue("admin");
            fromProp.setType(String.class);
            request.addProperty(fromProp);

            /*
             * PropertyInfo toProp =new PropertyInfo(); toProp.setName("ToUnit");
             * toProp.setValue(toUnit); toProp.setType(String.class);
             * request.addProperty(toProp);
             */
            final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            final HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

            try {
                androidHttpTransport.call(SOAP_ACTION, envelope);
                SoapPrimitive response1 = (SoapPrimitive) envelope.getResponse();
                Log.i("myApp", response1.toString());
            //  tv.setText(response.toString());
                Toast.makeText(getApplicationContext(), response.toString(),
                        Toast.LENGTH_LONG).show();

            } catch (Exception e) {
                tv.setText(e.toString());

                e.printStackTrace();

            }
          }

         catch (Exception e) {
          e.printStackTrace();
        }
      return response;
    }

    @Override
    protected void onPostExecute(String result) {
      tv.setText(result);
    }
  }

请找个人帮我做这件事。。

共有1个答案

段弘和
2023-03-14

嗨,像这样使用。

 private static final String SOAP_ACTION = "http://www.processmaker.com/Login";
private static final String METHOD_NAME = "Login";
private static final String NAMESPACE = "http://www.processmaker.com";
private static final String URL = "http://10.0.2.2/sysworkflow/en/classic/services/wsdl2";

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("userid", "admin");
request.addProperty("password", "admin");

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

  HttpTransportSE ht = new HttpTransportSE(URL);

 try {
    ht.call(SOAP_ACTION, envelope);
    final SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
    str = response.toString();

   } catch (Exception e) {
 e.printStackTrace();

  }
    Log.d("WebRespone", str);

希望这对你有帮助。

 类似资料:
  • 问题内容: 由于wamp服务器,我试图将我的android应用程序连接到本地主机url,但它不起作用。我的目标是获取json数据并解析这些数据。对于我的测试,我使用的是设备而不是模拟器,并且使用AndroidManifest.xml中的权限: 我的网址看起来像这样: 我试过了 : 但是到目前为止,它从未起作用: 然后我尝试了在互联网上找到的json url测试:http : //headers.j

  • 我用这个命令安装了Postgres 在终端上使用我得到 然后我安装了 后来我打开了UI并用这些信息创建了服务器 但是这个错误出现了 我怎么才能修好它?

  • 问题内容: 我最近在Windows 2003上安装了MySQL 5,并尝试配置实例。一切正常,直到我进入“应用安全设置”,这时才出现上述错误()。 我的防火墙中确实存在“ MySQL Server”的端口3306异常。 问题答案: 您可能必须向用户授予表上的“ localhost”特权。请参阅语法文档。这是一个示例(来自C语言)。 “在%s上授予所有特权。*由’%s’标识为’%s’@’本地主机’”

  • 有两个相关的问题,但他们没有完全回答问题。但如果国防部认为这是复制品,请告诉我。 编辑:我在Linux上使用docker,并且非常希望不在主机模式下运行容器。

  • 这是我在host.docker中使用的更新。内部代替本地主机,但我仍然得到一个错误

  • 我试图连接我的Android应用程序到本地主机网址感谢wamp服务器,但它不工作。我在这里的目标是获取json数据并解析这些数据。对于我的测试,我使用的设备不是仿真器,我使用权限在Androidanifest.xml: 我的url如下所示: 我试过: 但迄今为止,它从未奏效: 然后我尝试了一个在互联网上找到的json url测试:http://headers.jsontest.com/ 它工作得非