Как поддерживать вход на сервер в нативном приложении Android?

Позвольте мне описать мое приложение, Я получаю данные с веб-сайта JSON url (веб-сайт Drupal), данные в формате JSON. В моем приложении функция входа в систему работает отлично. & пользователь проверяется на сервере. Я также получаю другие данные (URL-адрес JSON) с сервера и отображаю их в своем приложении для Android. Теперь проблема в том, что я не могу получить доступ к данным JSON страниц, где требуется логин, потому что мой логин не сохраняется во всем приложении Android.

Я искал в stackoverflow и Google. Я получил эти ссылки и попробовал, но не знаю, как использовать их в своем коде: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html

Управление сеансом Android

Хранилище файлов cookie Http в Android

Вот пустой JSON с сайта drupal без входа в систему.

{
    "nodes": []
}

Вот JSON с сайта drupal- после входа в систему( http://www.mywebsite.com/user/login) и перезагрузите страницу http:/ /www.mywebsite.com/myaccount-pageна сайте - в веб-браузере компьютера. означает, что веб-браузер компьютера автоматически поддерживает сеанс входа в систему.

{
"nodes": [
    {
        "node": {
            "Uid": "51",
            "Username": "anand",
            "Name": "anand",
            "Address": "\n\tAt- vadodara Nr. Kareli Baugh",
            "Date of Birth": "1998-08-20",
            "Occupation": "student",
            "Member Since": "36 weeks 6 days"
        }
    }
 ]
}

Но в приложении для Android это не делается автоматически. Итак, я хочу сохранить этот сеанс в Android, чтобы я мог войти в приложение Android, после входа в систему перенаправить на другую страницу-активность и получить там данные JSON. Вот мой код:

LoginActivity.java

     public void onClick(View v) {


            String uName = editUser.getText().toString();
            String Password = editPass.getText().toString();

            if(uName.equals("") | Password.equals(""))
            {
                Toast.makeText(getApplicationContext(), "Enter the Username and Password",Toast.LENGTH_SHORT).show();
            }
            else{


                                     String strResponse = util.makeWebCall(loginURL,uName,Password);
                 System.out.println("=========> Response from login page=> " + strResponse);


                try{
                    if (strResponse.substring(KEY_SUCCESS) != null) {
                        txterror.setText("");



                         Intent inlogin = new Intent(LoginActivity.this,
                                post_myprofile.class);
                        inlogin.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(inlogin);

                        //finish();
                    }
                    else
                    {
                        txterror.setText("Username and Password Not valid !!!");
                    }
                }
                catch (Exception e) {
                    // TODO: handle exception
                }





            }


        }
    });

    btngotoregister.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent intent1 = new Intent(getApplicationContext(),
                    RegisterActivity.class);
            // intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent1);

        }
    });
 }
 }

метод makeWebCall в util.java

util.java

 public static String makeWebCall(String url, String uname,String pass)
{
    DefaultHttpClient client = new DefaultHttpClient();

    HttpPost post = new HttpPost(url);

     List params = new ArrayList();

     params.add(new BasicNameValuePair("username",uname));
        params.add(new BasicNameValuePair("password",pass));

    UrlEncodedFormEntity formEntity = null;
    try {
        formEntity = new UrlEncodedFormEntity(params);
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    post.setEntity(formEntity);

    try {
        //post.setEntity(new StringEntity(requestString));

        HttpResponse response = client.execute(post);
        System.out.println("=========> Responsehello => "+response);
        int statusCode = response.getStatusLine().getStatusCode();

        if (statusCode == HttpStatus.SC_OK)
        {
            HttpEntity entity = response.getEntity();
            InputStream is = entity.getContent();
            return iStream_to_String(is);
        }
        else
        {
            return "Hello This is status ==> :"+String.valueOf(statusCode);
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}

Теперь с этим кодом вход выполнен успешно, и я получил ответ JSON с подробностями от сервера . & page-activity перенаправляет на 2-ю страницу профиля пользователя. На 2-й странице я не получаю данные JSON профиля пользователя. Как упоминалось выше, я получаю пустой JSON, потому что сеанс не поддерживается.

Вот код 2-й страницы-активности.

post_myprofile.java

protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        String url = "http://www.cheerfoolz.com/myaccount-page";
        String strResponse = util.makeWebCall(url);

        try {
            JSONObject objResponse = new JSONObject(strResponse);

            JSONArray jsonnodes = objResponse
                        .getJSONArray(API.cheerfoolz_myprofile.NODES);

метод makewebcall для профиля в util.java

util.java

 public static String makeWebCall(String url) {

    DefaultHttpClient client = new DefaultHttpClient();

    HttpGet httpRequest = new HttpGet(url);
  //  HttpPost post = new HttpPost(url);

    try {

        HttpResponse httpResponse = client.execute(httpRequest);

         final int statusCode = httpResponse.getStatusLine().getStatusCode();

         if (statusCode != HttpStatus.SC_OK) {
          /*  Log.i(getClass().getSimpleName(),
                "Error => " + statusCode + " => for URL " + url);*/
            return null;
         }

         HttpEntity entity = httpResponse.getEntity();
            InputStream is = entity.getContent();
            return iStream_to_String(is);
    }
    catch (IOException e) {
        httpRequest.abort();
      // Log.w(getClass().getSimpleName(), "Error for URL =>" + url, e);
    }

    return null;

 }


public static String iStream_to_String(InputStream is1)
{
     BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096);
     String line;
     StringBuilder sb =  new StringBuilder();
     try {
        while ((line = rd.readLine()) != null) {
                sb.append(line);
         }
         rd.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     String contentOfMyInputStream = sb.toString();
     return contentOfMyInputStream;
}


}

Я получаю пустой JSON здесь, на этой странице, о чем я упоминал выше. Итак, как поддерживать сеанс в этом профиле пользователя и получать данные?

Спасибо за внимание.

5
задан Community 23 May 2017 в 11:53
поделиться