Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 15/10/11, 14:34:27
Avatar de KrLx_roller
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
Mensajes: 518
Compra y venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 518
Tu operador: -
Mencionado: 2 comentarios
Tagged: 0 hilos
¿Almacenar datos?

Os explico la situación. Estoy desarrollando un juego que tiene dos versiones, una para Android y otra para PC. La de PC la está desarrollando un amigo mío y yo desarrollo la versión para Android. La interfaz de usuario la tengo casi toda hecha, ahora solamente me falta una comunicación con el server y la base de datos. Para eso mi compañero ha hecho unas API's en JSON, de modo que yo puedo hacer un httpRequest a un archivo .php donde se encuentra todo el código JSON y se me envíe una respuesta dependiendo del contenido de éste.

En la versión para PC, para poder acceder a ese archivo .php donde se encuentra toda la información, tengo que iniciar sesión primero, es decir, tengo que poner mi nombre de usuario y contraseña (lógico). Si intento acceder desde la URL directamente sin haber iniciado sesión como mínimo hace 24h, no puedo acceder, me da ERROR.

En la versión de Android que estoy haciendo yo, inicio sesión primero desde la aplicación, pero luego al intentar acceder a la información me tira a ERROR (como si no hubiera detectado que el inicio de sesión se hizo). Entonces he supuesto que la información del inicio de sesión se tiene que guardar de alguna forma (tipo las cookies del navegador) para poder hacerlo.

No sé si estaré muy equivocado, pero creo que tiene que ser algo relacionado con eso. Si no habéis entendido la situación decidmelo ya que yo explicándome soy un poquito malo jajaj.

Gracias de antemano! Un saludo!
Responder Con Cita


  #2  
Viejo 17/10/11, 09:59:06
Avatar de RubenGM85
RubenGM85 RubenGM85 no está en línea
Miembro del foro
Mensajes: 435
 
Fecha de registro: mar 2010
Localización: Girona
Mensajes: 435
Modelo de smartphone: LG Nexus 5
Versión de ROM: Stock
Tu operador: Vodafone
Mencionado: 5 comentarios
Tagged: 0 hilos
Entonces envíale las cookies ;P

Código:
	public static HttpResponse getResponse(String url, Context mContext) {
		try {
			CookieSyncManager.createInstance(mContext);
			CookieManager cookieManager = CookieManager.getInstance();
			cookieManager.setAcceptCookie(true);

			DefaultHttpClient client = new DefaultHttpClient();
			CookieStore store = new BasicCookieStore();

			try {
				String[] keyValueSets = CookieManager.getInstance().getCookie(url).split(";");
				String domain = Uri.parse(url).getHost();
				for(String cookie : keyValueSets)
				{
					String[] keyValue = cookie.split("=");
					String key = keyValue[0];
					String value = "";
					if(keyValue.length>1) value = keyValue[1];
					BasicClientCookie ck = new BasicClientCookie(key, value);
					ck.setDomain(domain);
					ck.setPath("/");
					store.addCookie(ck);
				}
			} catch (Exception e) {
				Log.e(TAG, "Error: " + e.getLocalizedMessage());
				e.printStackTrace();
			}
			client.setCookieStore(store);

			HttpResponse response;
			HttpGet request = new HttpGet(url);
			response = client.execute(request);
			Log.i(TAG, "URL: " + url);
			Log.i(TAG, "Response: " + response.getStatusLine().getStatusCode() + ": " + response.getStatusLine().getReasonPhrase());

			return response;
		} catch (Exception e) {
			Log.e(TAG, "Error getResponse: " + e.getLocalizedMessage());
			e.printStackTrace();
			return null;
		}
	}

	public static InputStream getInputStream(String url, Context mContext) {
		try {
			return getResponse(url, mContext).getEntity().getContent();
		} catch (Exception e) {
			Log.e(TAG, "Error getInputStream: " + e.getLocalizedMessage());
			e.printStackTrace();
			return null;
		}
	}
Saludos.
Responder Con Cita
  #3  
Viejo 17/10/11, 14:58:59
Avatar de KrLx_roller
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
Mensajes: 518
Compra y venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 518
Tu operador: -
Mencionado: 2 comentarios
Tagged: 0 hilos
Gracias por la respuesta! Pero llevo toda la mañana intentando implementar el código en mi proyecto y no hay forma de hacerlo funcionar... Me podrías echar un una mano? Te estaría muy agradecido!

Este es el código que tengo para el inicio de sesión:

Código:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
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.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class IniciarSesion extends Activity implements OnClickListener {

	Button proceder,back,exit;
	TextView result;

    @override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.iniciarsesion);

        proceder = (Button)findViewById(R.id.proceder);
        proceder.setOnClickListener(this);
        result = (TextView)findViewById(R.id.lbl_result);
    }
    
    public void postLoginData() {
    	
        HttpClient httpclient = new DefaultHttpClient();
        
        HttpPost httppost = new HttpPost("URL");
        
        try {

        	EditText uname = (EditText)findViewById(R.id.put_usuario1);
        	String name = uname.getText().toString();

        	EditText pword = (EditText)findViewById(R.id.put_contrasenya1);
        	String password = pword.getText().toString();
        	
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("nick", name));
            nameValuePairs.add(new BasicNameValuePair("password", password));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            Log.w("HTTP", "Execute HTTP Post Request");
            HttpResponse response = httpclient.execute(httppost);
            
            String str = inputStreamToString(response.getEntity().getContent()).toString();
            
            if(str.toString().trim().equalsIgnoreCase("true"))
            {
            	Intent intent = new Intent(IniciarSesion.this, Test.class);
        		startActivity(intent);
        		finish();
            }
            else
            {
            	result.post(new Runnable(){
            		public void run() {
            			result.setText("caca");
            		}
            	});
            }
        } 
        
        catch (ClientProtocolException e) {
        	e.printStackTrace();
        } catch (IOException e) {
        	e.printStackTrace();
        }
    }

	private StringBuilder inputStreamToString(InputStream is) {
    	String line = "";
    	StringBuilder total = new StringBuilder();
    	BufferedReader rd = new BufferedReader(new InputStreamReader(is));
    	try {
			while ((line = rd.readLine()) != null) { 
				total.append(line); 
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
    	return total;
    }

	@override
	public void onClick(View view) {
		if(view == proceder){

			final ProgressDialog pd = ProgressDialog.show(this, null, "Iniciando Sesión...", true, false);
					new Thread(){
					public void run(){
					postLoginData();
					pd.dismiss();
					}
					}.start();		
		}
	}
}
Muchísimas gracias!

Última edición por KrLx_roller Día 17/10/11 a las 22:56:54
Responder Con Cita
  #4  
Viejo 20/10/11, 18:47:59
Avatar de KrLx_roller
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
Mensajes: 518
Compra y venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 518
Tu operador: -
Mencionado: 2 comentarios
Tagged: 0 hilos
Aún no he podido implementar el código que me dijiste, estoy muy perdido y por mucho que busque por internet no encuentro nada que me pueda ayudar...
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 00:13:06 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007