2012-05-09 10 views
5

Vamos a describir mi solicitud, estoy traer los datos de la página web JSON URL (página web de Drupal), los datos están en formato JSON. En mi aplicación, la funcionalidad de inicio de sesión funciona perfectamente. & el usuario está validado en el servidor. También me retracto otros datos JSON (URL) del servidor & mostrando en mi aplicación Android. Ahora, el problema es que no puedo acceder a los datos JSON de páginas, donde se requiere inicio de sesión, porque mi inicio de sesión no es el mantenimiento de toda la aplicación Android.¿Cómo mantener el inicio de sesión del servidor a través de la aplicación nativa de Android?

He buscado en Google stackoverflow & Tengo estos enlaces & intentado, pero no sé cómo usarlos en mi código: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html

Android session management

Http cookie store in Android

Aquí es el JSON vacío que proviene del sitio de drupal sin iniciar sesión.

{ 
    "nodes": [] 
} 

Aquí es el JSON de Drupal sitio-después de Entrar (http://www.mywebsite.com/user/login) & vuelva a cargar la página http://www.mywebsite.com/myaccount-page en el sitio - en navegador web del ordenador. significa navegador web de la computadora mantiene automáticamente la sesión de inicio de sesión.

{ 
"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" 
     } 
    } 
] 
} 

Sin embargo, en aplicaciones para Android no hace esto automáticamente. Así que quiero mantener esta sesión en Android para que pueda iniciar sesión en la aplicación de Android, después de iniciar sesión redirigir a otra actividad de la página & obtener datos JSON allí. Aquí está mi código:

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

     } 
    }); 
} 
} 

método makeWebCall en util.java

util.java

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

    HttpPost post = new HttpPost(url); 

    List<NameValuePair> params = new ArrayList<NameValuePair>(); 

    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; 
} 

Ahora, con este código el inicio de sesión es exitoso & Recibí la respuesta JSON del servidor con detalles. & page-activity redirige a la 2ª página para el perfil de usuario. En segunda página no estoy recibiendo el perfil de usuario de datos JSON-Como se mencionó anteriormente, estoy consiguiendo JSON en blanco porque la sesión no se mantiene.

Este es el código de la segunda página de la actividad.

post_myprofile.java método makewebcall

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

de perfil en 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; 
} 


} 

estoy recibiendo JSON en blanco aquí en esta página - que he mencionado anteriormente. entonces, ¿cómo mantener la sesión en esta actividad de perfil de usuario & obtener los datos?

Gracias por escuchar.

Respuesta

3

finalmente Su trabajo para mí :)

en lugar de utilizar la nueva DefaultHttpClient todo el tiempo, he hecho que sea estática & utilizado sólo una vez.

static DefaultHttpClient client = new DefaultHttpClient(); 
+0

Muchas gracias .. Esto fue de gran ayuda :) – Dave

0
package com.velmurugan.vazbo_new.utility; 
import android.webkit.CookieManager; 
import android.webkit.CookieSyncManager; 
import org.apache.http.Header; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpException; 
import org.apache.http.HttpRequest; 
import org.apache.http.HttpRequestInterceptor; 
import org.apache.http.HttpResponse; 
import org.apache.http.HttpResponseInterceptor; 
import org.apache.http.HttpStatus; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.cookie.Cookie; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.protocol.HttpContext; 
import java.io.*; 
import java.util.ArrayList; 
import java.util.List; 
/** 
* Created by [email protected] on 11/1/2015. 
*/ 
public class SessionParser { 
    public SessionParser(){ 
    } 
    public static String makeWebCall(String url,List<NameValuePair> params ) 
    { 
     CommonClass.httpClient = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(url); 
     UrlEncodedFormEntity formEntity = null; 
     try { 
      formEntity = new UrlEncodedFormEntity(params); 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     post.setEntity(formEntity); 
     try { 
      HttpResponse response = CommonClass.httpClient.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; 
    } 
    public static String makeWebCall(String url) { 
     System.out.println("=========> Response url => "+url); 
     HttpGet httpRequest = new HttpGet(url); 
     try { 
      HttpResponse httpResponse = CommonClass.httpClient.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; 
    } 
} 
Cuestiones relacionadas