Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9217377
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 18, 20262026-06-18T02:37:17+00:00 2026-06-18T02:37:17+00:00

I have an android app that retrieves data from a remote server, including authentication.

  • 0

I have an android app that retrieves data from a remote server, including authentication. Remote server is using Yii. Our iPhone version is using the remote web service and there’s no issue at all. But with our Android: 1) we can login, server returns 200; 2) but next page when we try to call another api to query the db, it keeps returning error that user is not logged in.

What I’ve done:
1. Check the user session in the back end. Yes, after logging in from android, user sessions appears active.
2. Use the same API call with Firefox’s POSTER. Yes, it can retrieve data.

What might have gone wrong? Can someone please help? Thanks a lot!

Here’s my login code:

package ...
import ...

public class Login extends Activity implements OnClickListener {

    EditText etUser, etPass;
    Button bLogin, btnCancel;

    //Create string variables that will have the input assigned to them
    String username, password;

    //Create a HTTPClient as the form container
    HttpClient httpclient;

    //Use HTTP POST method
    HttpPost httppost;

    //Create an array list for the input data to be sent
    ArrayList<NameValuePair> nameValuePairs;

    //Create a HTTP Response and HTTP Entity
    HttpResponse response;
    org.apache.http.HttpEntity entity;
//    protected static final String TAG = MainActivity.class.getSimpleName();
    final String url = "..remote api...";
 // JSON Node names
     private static final String TAG_CONTACTS = "users";
     // contacts JSONArray
     JSONArray contacts = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        initialise();

    }



    private void initialise() {
        etUser = (EditText) findViewById(R.id.txtUname);
        etPass = (EditText) findViewById(R.id.txtPwd);
        bLogin = (Button) findViewById(R.id.sumit_login);
        btnCancel = (Button) findViewById(R.id.btn_Cancel);
        //Now to set an onClickListener

        bLogin.setOnClickListener(this);

        btnCancel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);  
            }
        });
    }

    public void onClick(View v)  {
        // This is where we will be working now
        if (etUser.getText().toString().length() == 0
                || etPass.getText().toString().length() == 0) {
            Toast.makeText(getApplicationContext(),
                    "Please enter username and password",
                    Toast.LENGTH_SHORT).show();
        } else {
            new MyAsyncTask().execute();
        }

    }//END onClick()

    private static String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }//END convertStreamToString()



    private class MyAsyncTask extends AsyncTask<Void, Void, Integer>
    {
        ProgressDialog mProgressDialog;


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(Login.this);
            mProgressDialog.setMessage("Authenticating...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
        }

        @Override
        protected Integer doInBackground(Void... params) {

            int repsonStatus = 0;
            //Create new default HTTPClient
            httpclient = new DefaultHttpClient();

            //Create new HTTP POST with URL to php file as parameter
            httppost = new HttpPost("... login api ..."); 

            //Assign input text to strings
            username = etUser.getText().toString();
            password = etPass.getText().toString();

            JSONParser jParser = new JSONParser();
            //Next block of code needs to be surrounded by try/catch block for it to work
            try {
                //Create new Array List
//                nameValuePairs = new ArrayList<NameValuePair>(2);
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                //place them in an array list
                nameValuePairs.add(new BasicNameValuePair("login", "login"));
                nameValuePairs.add(new BasicNameValuePair("username", username));
                nameValuePairs.add(new BasicNameValuePair("password", password));
                nameValuePairs.add(new BasicNameValuePair("api_key", "service_api"));


                //Add array list to http post
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                //assign executed form container to response
                response = httpclient.execute(httppost); //response from the PHP file

                Log.i("AirconServer -- header login", response.getAllHeaders().toString());
                Log.i("postData", response.getStatusLine().toString());
                HttpEntity entity_ = response.getEntity();

                repsonStatus = response.getStatusLine().getStatusCode();
                if(response.getStatusLine().getStatusCode() == 200){
                    Log.i("AirconService - ", "LOGIN SUCCESSFUL!");


                    }
                } else {
                    Toast.makeText(getApplicationContext(),
                            "Invalid Username or password.",
                            Toast.LENGTH_SHORT).show();
                }


            } catch(Exception e){

                e.printStackTrace();
            }

            return repsonStatus;
        }
        @Override

        protected void onPostExecute(Integer result) {
            mProgressDialog.dismiss();
            if(result == 200) {
                Intent intent = new Intent(getApplicationContext(), MainMenuActivity.class);
                startActivity(intent);
            } else {
                Toast.makeText(getApplicationContext(),
                        "Invalid Username or password.",
                        Toast.LENGTH_SHORT).show();
            }         
        }
    }

}

Here’s the code for the other call that still asks for logging in while user’s already logged in.

public class GetMybookings extends ListActivity {

    int TIMEOUT_MILLISEC = 10000;
    ArrayList<jobs> bookings = new ArrayList<jobs>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public void onStart() {
        super.onStart();

        final Calendar c = Calendar.getInstance();
        int mYear = c.get(Calendar.YEAR);
        final String url = "... api ...";
        new MybookingTask().execute(url);
    }

    @Override
    protected void onListItemClick(android.widget.ListView l, android.view.View v, int position, long id) {
        if (this.bookings == null) {
            return;
        }
        startActivity(new Intent(Intent.ACTION_VIEW));
    }
    private void refreshResults(ArrayList<jobs> books) {

        setListAdapter(new Mybookings(this,books));
    }

    private class MybookingTask extends AsyncTask<String, Void, ArrayList<jobs>> {

            ProgressDialog mProgressDialog;


                    @Override
        protected void onPreExecute() {
                        super.onPreExecute();
                        mProgressDialog = new ProgressDialog(GetMybookings.this);
                        mProgressDialog.setMessage("Loading Bookings...");
                        mProgressDialog.setIndeterminate(false);
                        mProgressDialog.setCancelable(false);
                        mProgressDialog.show();
        }
        protected ArrayList<jobs> doInBackground(String... urls) {
            try {
                HttpParams httpParams = new BasicHttpParams();
                HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
                HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);

                HttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(urls[0]);
                HttpResponse response = null;

                try {

                    ResponseHandler<String> responseHandler = new BasicResponseHandler();
                    String responseBody = httpClient.execute(httpGet, responseHandler);

                    response = httpClient.execute(httpGet);
                    Log.i("AirconService GetMyBookings -- header login", response.getAllHeaders().toString());
                    Log.i("postData", response.getStatusLine().toString());
                    Log.i("AirconService GetMyBookings -- response data", response.getEntity().toString());
                    Log.i("AirconService GetMyBookings-- response data", response.toString());

                    HttpEntity entity = response.getEntity();
                    String responseString = new String();
                    if(entity != null) {
                        responseString = EntityUtils.toString(entity);
                        Log.i("WHAT???", "??? responseString is: " + responseString);
                    }



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


            } catch(Throwable t) {
                t.printStackTrace();
            }

            return null;
        }
        protected void onPostExecute(ArrayList<jobs> result) {
            mProgressDialog.dismiss();
            refreshResults(result);
        }
    }
}

UPDATED

I tried Anand’s solution: IT’s WORKING!!!

Common.java:

import ...

public class Common {
    public static CookieStore cookieStore = new BasicCookieStore();
}

Login code:

public class Login extends Activity implements OnClickListener {

static HttpContext localContext = new BasicHttpContext();

…

   protected Integer doInBackground(Void... params) {
        localContext.setAttribute(ClientContext.COOKIE_STORE, Common.cookieStore);
        //Create new default HTTPClient
        httpclient = new DefaultHttpClient();

        //Create new HTTP POST with URL to php file as parameter
        httppost = new HttpPost(... api ...); 

Second call after login (in a separate class):

public class GetMybookings extends ListActivity {

    static HttpContext localContext = new BasicHttpContext();
        ....
        protected ArrayList<jobs> doInBackground(String... urls) {
            try {
                HttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(... api ....);
                HttpResponse response = null;

                try {
                    localContext.setAttribute(ClientContext.COOKIE_STORE, Common.cookieStore);
                    response = httpClient.execute(httpGet, localContext);
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-18T02:37:18+00:00Added an answer on June 18, 2026 at 2:37 am

    Try this it’s work for me :

    // Create a local instance of cookie store
    
    public static CookieStore cookieStore = new BasicCookieStore();
    
    // Create local HTTP context
    
    static HttpContext localContext = new BasicHttpContext();
    
     // Bind custom cookie store to the local context
    
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    
    // Pass local context as a parameter
    HttpResponse  httpResponse = client.execute(request, localContext);
    
    List<Cookie> cookies = cookieStore.getCookies();
    for (int i = 0; i < cookies.size(); i++) {
        MLog.d("LOCAL COOKIES: ", ""+ cookies.get(i));
    }
    
    HttpEntity entity = httpResponse.getEntity();
    

    try to use this method :

     // Create a local instance of cookie store
    public static CookieStore cookieStore = new BasicCookieStore();
    
    // Create local HTTP context
    static HttpContext localContext = new BasicHttpContext();
    
    
    
    
    
    private synchronized void executeRequest(String  url) {
    
            HttpPost request = new HttpPost(url);
    
            List<NameValuePair> params = new ArrayList<NameValuePair>();
                 //place them in an array list
            params.add(new BasicNameValuePair("login", "login"));
            params.add(new BasicNameValuePair("username", username));
            params.add(new BasicNameValuePair("password", password));
            params.add(new BasicNameValuePair("api_key", "service_api"));
    
            request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
    
            HttpClient client = new DefaultHttpClient();
    
            HttpResponse httpResponse;
    
            // Bind custom cookie store to the local context
            localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    
            try{
            // Pass local context as a parameter
            httpResponse = client.execute(request, localContext);
    
            List<Cookie> cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                Log.d("LOCAL COOKIES: ", ""+ cookies.get(i));
            }
    
            HttpEntity entity = httpResponse.getEntity();
    
            if (entity != null) {
    
                InputStream instream = entity.getContent();
                String res = convertStreamToString(instream);
    
                instream.close();
            }
            } catch (Exception e) {
    
                client.getConnectionManager().shutdown();
                e.printStackTrace();
    
    
            }      
     }  
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have Android client app that communicates with server using Socket . On my
I have a web app, that also has an iPhone and Android app using
I have an android app that plays audio from the application class. I have
I am trying to make an android app that retrieves info from google app
I have an app for Android (and hopefully later iPhone) that is based on
I have an android app that needs to connect frequently to the server to
I have an android app that I am trying to launch and it gives
I have an Android app that has an Application class and I have another
I have an Android app that I had working a few months ago which
I have an Android app that begins by displaying a dialog. When I set

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.