安卓:无法使用KSOAP从Web服务获取数据 [英] Android:unable to get data from webservice using kSoap

查看:241
本文介绍了安卓:无法使用KSOAP从Web服务获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

喜在我的应用我想从web服务,如果检查数据库的用户名和密码,其真正会显示成功消息或失败的消息,但无法显示状态信息

hi in my app i am trying to check the username and password in database from webservice and if its true will show success message or failed message, but unable to show the status message

public class AndroidLoginExampleActivity extends Activity {
    private final String NAMESPACE = "http://ws.userlogin.com";
    private final String URL = "http://localhost:8080/Androidlogin/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();

            }
        });
    }

    @SuppressLint("NewApi") private void loginAction(){
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
         StrictMode.setThreadPolicy(policy); 
        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());
          Log.d("resp:",response.toString() );
        }
        catch(Exception e){

        }
       }

下面是我的Web服务调用

below is my webservice call

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/mydb","root","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;

 }

}

不知道是IAM做wrong.Any帮助AP preciated。

not sure were iam doing wrong.Any help is appreciated.

推荐答案

您应该做网络realted的线程操作。您可以使用线程的AsyncTask

You should do network realted operation on a thread. You can use a thread or AsyncTask.

移动你的则loginAction() A 线程内或者在 doInbackground 的AsyncTask

Move your loginAction() inside a thread or inside doInbackground of AsyncTask.

切记不要从回地面线程更新界面。

Remember not to update ui from the back ground thread.

   new TheTask().execute();

的AsyncTask

AsyncTask

public class TheTask extends AsyncTask <Void,Void,Void>
{


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
            // display a dialog
    }
    @Override
    protected Void doInBackground(Void... params) {
              // your login authentcation 
              // remove updation of textview.
              // do not update ui here 
    return null;
    }
    @Override
    protected void onPostExecute(Void result) {
    super.onPostExecute(result);
           // dismiss the dialog
           // update textview
          }
    }

AsyncTask的文档

AsyncTask docs

http://developer.android.com/reference/android/os/ AsyncTask.html

编辑:

public class MainActivity extends Activity {
    private final String NAMESPACE = "http://ws.userlogin.com";
    private final String URL = "http://localhost:8080/Androidlogin/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. */
    EditText ed1,ed2;
    TextView tv;
    String user_Name,user_Password;
    SoapPrimitive response ;
    ProgressDialog pd;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ed1 = (EditText) findViewById(R.id.editText1);
        ed2 = (EditText) findViewById(R.id.editText2);
        tv = (TextView) findViewById(R.id.textView1);
        user_Name = ed1.getText().toString();
       user_Password = ed2.getText().toString();
       pd = new ProgressDialog(this);
        Button login = (Button) findViewById(R.id.button1);
        login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                new TheTask().execute();
            }
        });
    }
     class TheTask extends AsyncTask<Void,Void,SoapPrimitive>
     {



        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pd.show();
        }

        @Override
        protected SoapPrimitive doInBackground(Void... params) {
               SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                    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
                    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);
                        response = (SoapPrimitive) envelope.bodyIn;
                        Log.i("Response",""+response);
                       // response = (SoapPrimitive)envelope.getResponse();
                    }
                    catch(Exception e){

                    }
            return response;
        }

        @Override
        protected void onPostExecute(SoapPrimitive result) {
            super.onPostExecute(result);
            pd.dismiss();
            if(result!=null)
            tv.setText(result.toString());
        }

     }

}

这篇关于安卓:无法使用KSOAP从Web服务获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆