![]() |
|
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 |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
¿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! |
|
#2
|
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; } } |
#3
|
||||
|
||||
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(); } } } Última edición por KrLx_roller Día 17/10/11 a las 22:56:54 |
#4
|
||||
|
||||
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...
|
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 19:27:22 (GMT +2)
HTCMania: líderes desde el 2007