无法在Android中访问java Web服务

时间:2016-06-05 22:39:00

标签: java android web-services android-ksoap2

我尝试用java创建android登录Web服务。我正在使用Axis2。

我正在使用Eclipse Adt Bundle开发Eclipse EE和Android应用程序的Web服务。我可以访问" http://localhost:8081/Login/services/Login?wsdl"页。当android应用程序运行并单击登录按钮时,我在屏幕上看不到任何消息(在Web服务状态="成功"或状态="登录失败")内发出。

我没有解决这个问题。我们将不胜感激。

网络服务:

package com.userlogin.ws;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Login {
    public String authentication(String userName, String password) {

        String retrievedUserName = "";
        String retrievedPassword = "";
        String status = "";
        try {

            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/places", "root",
                    "");
            PreparedStatement statement = con
                    .prepareStatement("SELECT * FROM user WHERE username = '"
                            + userName + "'");
            ResultSet result = statement.executeQuery();

            while (result.next()) {
                retrievedUserName = result.getString("username");
                retrievedPassword = result.getString("password");
            }

            if (retrievedUserName.equals(userName)
                    && retrievedPassword.equals(password)) {
                status = "Success!";
            }

            else {
                status = "Login fail!!!";
            }

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

    }

}

机器人:

package com.androidlogin.ws;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
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.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AndroidLoginExampleActivity extends Activity {
    private final String NAMESPACE = "http://ws.userlogin.com";
    private final String URL = "http://localhost:8081/Login/services/Login?wsdl";
    private final String SOAP_ACTION = "http://ws.userlogin.com/authentication";
    private final String METHOD_NAME = "authentication";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button login = (Button) findViewById(R.id.btn_login);
        login.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                loginAction();

            }
        });
    }

    private void loginAction(){
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        EditText userName = (EditText) findViewById(R.id.tf_userName);
        String user_Name = userName.getText().toString();
        EditText userPassword = (EditText) findViewById(R.id.tf_password);
        String user_Password = userPassword.getText().toString();

      //Pass value for userName variable of the web service
        PropertyInfo unameProp =new PropertyInfo();
        unameProp.setName("userName");//Define the variable name in the web service method
        unameProp.setValue(user_Name);//set value for userName variable
        unameProp.setType(String.class);//Define the type of the variable
        request.addProperty(unameProp);//Pass properties to the variable

      //Pass value for Password variable of the web service
        PropertyInfo passwordProp =new PropertyInfo();
        passwordProp.setName("password");
        passwordProp.setValue(user_Password);
        passwordProp.setType(String.class);
        request.addProperty(passwordProp);

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

        try{
            androidHttpTransport.call(SOAP_ACTION, envelope);
               SoapPrimitive response = (SoapPrimitive)envelope.getResponse();

               TextView result = (TextView) findViewById(R.id.tv_status);
               result.setText(response.toString());

        }
        catch(Exception e){

        }
       }

}

2 个答案:

答案 0 :(得分:0)

你在Android代码中压缩异常:

stackView

这很可能会丢弃可以告诉您潜在问题是什么的证据。无论哪种方式,像这样挤压override func viewDidLoad() { super.viewDidLoad() stackView = CardStackView(frame: CGRect(x: 20, y: 80, width: 200, height: 200)) stackView.dataSource = [UIImage(named: "2008")!, UIImage(named: "2008")!] stackView.setNeedsLayout() self.view.addSubview(stackView) } 是非常糟糕的做法。

答案 1 :(得分:0)

在android代码中你试图连接到localhost,但它应该是运行java服务的主机名。在Android设备中,您显然没有端口8081上的任何可用服务。 这是一个很常见的错误。通常你在同一台机器上开发服务器端和android应用程序,所以当你在localhost上运行服务时,你相信在android应用程序中应该有相同的服务。但是,在模拟器中,localhost是android设备的地址。开发和测试此类应用程序的最简单方法是使用主机的IP地址。