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

Respuesta
 
Herramientas
  #1  
Viejo 15/10/11, 14:34:27
Array

[xs_avatar]
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
· Votos compra/venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 518
Tu operador: -

¿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
Array

[xs_avatar]
RubenGM85 RubenGM85 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Localización: Girona
Mensajes: 435
Modelo de smartphone: LG Nexus 5
Tu operador: Vodafone
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
Array

[xs_avatar]
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
· Votos compra/venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 518
Tu operador: -

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
Array

[xs_avatar]
KrLx_roller KrLx_roller no está en línea
Usuario muy activo
· Votos compra/venta: (3)
 
Fecha de registro: oct 2008
Mensajes: 518
Tu operador: -

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   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:11:54 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /