在一个会话中连接Android应用程序

时间:2014-07-06 23:52:09

标签: java android eclipse soap

我正在制作这个Android应用程序,用户必须登录才能进入应用程序,我通过网络服务将我的应用程序连接到数据库 我成功创建了登录页面,但问题是,用户如何进入具有相同会话ID的第二页以及系统如何检索登录其他页面的用户详细信息 那是我的login.java代码

import android.R.string;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
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 org.ksoap2.transport.HttpsTransportSE;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View.OnClickListener;

public class Login extends ActionBarActivity   {

    private static final String NAMESPACE = "***"; //WHAT IS A NAMESPACE
    private static final String URL = "***"; //removed HTTPS because I'm making a https call below
    private static final String METHOD_NAME = "login";
    private static final String SOAP_ACTION =  NAMESPACE + "/" + METHOD_NAME; //in wsdl it's nothing

    EditText usersusername, userspassword;
    Button LB;

    @Override 
    protected void onCreate(Bundle savedInstanceState) { // WHAT DOES PROTECTED VOID MEAN? CAN YOU RENAME ANYTHING
        //SUCH AS SAVEDINSTANCESTATE OR IS IT ALWAYS LIKE THAT? 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login); //CAN YOU HAVE TWO ACTIVITIES TO ONE LAYOUT?
       usersusername = (EditText)findViewById(R.id.editusername);
       userspassword = (EditText)findViewById(R.id.editusername);
       LB = (Button) findViewById(R.id.loginbutton);
       LB.setOnClickListener(new View.OnClickListener() {

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

      }
     });




    }


    private void loginAction(){
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            usersusername = (EditText)findViewById(R.id.editusername);
            userspassword = (EditText)findViewById(R.id.editusername);
            String user_Name = usersusername.getText().toString();
            String user_Password = userspassword.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); // Declare the version of the soap request
           envelope.setOutputSoapObject(request);
           HttpTransportSE aht = new HttpTransportSE(URL);

           try {

                //URL = www.servicedeskattach.datacom.co.nz/axis/services/USD_R11_WebService?wsdl


                aht.call(SOAP_ACTION, envelope);  //this is the actual part that calls the web service
                String requestDumpString = aht.requestDump;
                String responseDumpString = aht.responseDump;




          //Get the soapresult from the envelope body
         //     SoapObject result = (SoapObject)envelope.bodyIn;
                SoapPrimitive response =(SoapPrimitive)envelope.getResponse();
                String status = response.toString(); // Result string
                TextView result = (TextView) findViewById(R.id.tv_status);
                   result.setText(response.toString());

                   if(status.equals("Success!"))
                    {
                       Intent intent = new Intent(Login.this,Dashboard.class);
                       intent.putExtra("username",usersusername.getText().toString());
                       startActivity(intent);


                    }
                   else
                    {
                       Intent i = new Intent(getApplicationContext(), Login.class);
                       startActivity(i);
                    }



           }
           catch (Exception e){

           }






        } 


    } 

1 个答案:

答案 0 :(得分:0)

这是跨活动持久保存数据的一个很好的例子。要做到这一点,最常见的例子是使用"偏好"文件。如果您不希望数据持续很长时间,您可以控制它在服务器端(使cookie或会话ID到期):

How do I get the SharedPreferences from a PreferenceActivity in Android?

使用意图传递数据并不错,但如果有来电并且应用程序移至后台,Android可能会终止然后重新启动应用程序,从而导致数据丢失。这可能听起来很安全"但情况也可能是电话响起或用户回复短信,如果经常发生这种情况,您的用户可能会感到烦躁。

数据库通常是矫枉过正的,除非你已经有了一个USER对象,等等。