2016-06-05 4 views
0

Я пытаюсь создать веб-сервис для входа в Android с помощью java. Я использую Axis2.Не удается получить доступ к веб-сервису java на Android

Я разрабатываю веб-сервис с Eclipse EE и приложение для Android с Eclipse Adt Bundle. Я могу получить доступ к странице «http://localhost:8081/Login/services/Login?wsdl». Когда приложение Android запускалось и нажало кнопку входа в систему, я не вижу на экране сообщений (выпущенных в состоянии веб-сервисов = «успех» или «статус =« вход в систему »).

Я не решал эту проблему. Любая помощь будет оценена.

Web Service:

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; 

    } 

} 

Android:

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){ 

     } 
     } 

} 
+0

localhost хоста Android не является локальным хостом вашего компьютера – njzk2

+0

Я пытался получить доступ с помощью 10.0.2.2:8081. Но не может решить проблему. –

+0

есть хороший шанс, это просто https://stackoverflow.com/questions/6343166/how-to-fix-android-os-networkonmainthreadexception – njzk2

ответ

0

Вы давя исключения в андроида код:

catch(Exception e){ 

    } 

Там хороший шанс, что это отбрасывает доказательства того, что расскажет вам, в чем заключается основная проблема. В любом случае, раздавливание Exception, как будто это очень плохая практика.

+0

Верно, но это скорее комментарий как общая практика и предложение отладки, чем реальный ответ на этот вопрос. –

+1

@ChrisStratton - Я не согласен. Фиксация этого - первый шаг в решении его проблемы, и поэтому фактический ответ на его вопрос. Немного удачи, он сможет выработать все для себя. Единственное, что нужно сделать, это закрыть его как «вне темы - недостаточные доказательства». –

+0

Несмотря на то, что это хорошее предложение для отладки, * актуальные * проблемы могут быть распознаны из кода, который уже был предоставлен, если у вас есть время для понимания сетей в контексте android и используемой библиотеки. –

0

В коде Android, который вы пытаетесь подключиться к localhost, но это должно быть имя хоста, в котором работает java-служба. В устройстве Android вы, очевидно, не имеете никаких услуг на порту 8081. Это довольно распространенная ошибка. Обычно вы разрабатываете приложение на стороне сервера и андроида на одном компьютере, поэтому при запуске службы на localhost вы считаете, что тот же сервис должен быть доступен в приложении Android. Однако в эмуляторе localhost является адресом устройства Android. Самый простой способ разработки и тестирования таких приложений - использовать IP-адрес хост-машины.

Смежные вопросы