Foros del Web » Programando para Internet » Android »

Error al dal clic sobre un item

Estas en el tema de Error al dal clic sobre un item en el foro de Android en Foros del Web. Saludos, estoy realizando una aplicacion que se conecta a mysql, primero ingreso un nombre y hace la busqueda y lo muestra todo bien hasta ahi...ahora ...
  #1 (permalink)  
Antiguo 17/01/2013, 10:16
 
Fecha de Ingreso: septiembre-2008
Mensajes: 257
Antigüedad: 15 años, 7 meses
Puntos: 4
Error al dal clic sobre un item

Saludos, estoy realizando una aplicacion que se conecta a mysql, primero ingreso un nombre y hace la busqueda y lo muestra todo bien hasta ahi...ahora cuando le doy clic sobre ese nombre debe mostrarme otra pantalla cargando todos los detalles es decir si en la busqueda anterior me mostro "Juan lopez" al darle clic sobre este "Juan Lopez" en la pantalla debe mostrarme todos sus datos cedula nombres, ect, y eso para poder hacer una actulizacion..pero el problema es que cuando le doy clic sobre el me ma este error...

Código:
01-17 16:03:49.590: E/AndroidRuntime(1072): FATAL EXCEPTION: main
01-17 16:03:49.590: E/AndroidRuntime(1072): android.os.NetworkOnMainThreadException
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at libcore.io.IoBridge.connect(IoBridge.java:112)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at java.net.Socket.connect(Socket.java:842)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at com.example.taller06oct.JSONParser.makeHttpRequest(JSONParser.java:62)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at com.example.taller06oct.EditEmpleadosActivity$GetEmpleadoDetails$1.run(EditEmpleadosActivity.java:134)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at android.os.Handler.handleCallback(Handler.java:725)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at android.os.Handler.dispatchMessage(Handler.java:92)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at android.os.Looper.loop(Looper.java:137)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at android.app.ActivityThread.main(ActivityThread.java:5039)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at java.lang.reflect.Method.invoke(Method.java:511)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-17 16:03:49.590: E/AndroidRuntime(1072): 	at dalvik.system.NativeStart.main(Native Method)
Alguien sabe cual es el problema, gracias de antemano...

Cabe mencionar que lo estoy emulando con eclipse...
  #2 (permalink)  
Antiguo 17/01/2013, 21:47
 
Fecha de Ingreso: agosto-2006
Mensajes: 8
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Error al dal clic sobre un item

tenes colocados los permisos en el manifest para utilizar la red?
la aplicacion se conecta por socket a mysql? o mediante una web? estan bien las url /ip?
  #3 (permalink)  
Antiguo 18/01/2013, 12:10
Avatar de zero_master  
Fecha de Ingreso: junio-2011
Ubicación: Leon, Gto
Mensajes: 290
Antigüedad: 12 años, 10 meses
Puntos: 74
Respuesta: Error al dal clic sobre un item

No se por que ponen la mega lista que les aparece en el debug cuando eso realmente no sirve de nada... lo que tienes que hacer es ir linea por linea checando con un logcat hasta que parte es donde se truena el programa, aunque suene burdo es la forma mas efectiva
  #4 (permalink)  
Antiguo 19/01/2013, 10:18
 
Fecha de Ingreso: septiembre-2008
Mensajes: 257
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Error al dal clic sobre un item

Saludos, respondiendo a troya86,.si todos lospermisos estan, y tambien ya revise las url, y me conecto a mysql mediante php y json...como mencione al inicio, mi aplicacion lo primero q hace es una busqueda y extrae datos de la base y todo fuciona bien el problema es cuando a esos datos q m devolvio la consulta le hago clic para obtener mas datos ahi me da ese error...

Repondiendo a zero_master...como hago eso que menciona de ir chequando liena por linea...soy nuevo en java y android por ende no manejo todas las opcione disponibles para ver los errores..gracias por su ayuda..
  #5 (permalink)  
Antiguo 21/01/2013, 19:48
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 25
Antigüedad: 13 años
Puntos: 2
Respuesta: Error al dal clic sobre un item

Ese error te sale porque estas intentando ejecutar una accion pesada, una consulta por internet a una base de datos, sobre el hilo principal de la aplicación, el de la interfaz, eso puede hacer que tu aplicación se detenga repentinamente.
Si pones que la consulta se ejecute en un hilo aparte, se solucionaría el problema.
  #6 (permalink)  
Antiguo 21/01/2013, 19:51
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 25
Antigüedad: 13 años
Puntos: 2
Respuesta: Error al dal clic sobre un item

Cita:
Iniciado por zero_master Ver Mensaje
No se por que ponen la mega lista que les aparece en el debug cuando eso realmente no sirve de nada... lo que tienes que hacer es ir linea por linea checando con un logcat hasta que parte es donde se truena el programa, aunque suene burdo es la forma mas efectiva
Muy por el contrario zero_master, la información que da el debug es importantísima, nos indica que tipo de error se generó e incluso en que línea, ayuda bastante al momento de desarrollar.
  #7 (permalink)  
Antiguo 21/01/2013, 20:30
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 25
Antigüedad: 13 años
Puntos: 2
Respuesta: Error al dal clic sobre un item

Cita:
Iniciado por sheshito Ver Mensaje
01-17 16:03:49.590: E/AndroidRuntime(1072): at com.example.taller06oct.JSONParser.makeHttpRequest (JSONParser.java:62)
Acabo de darle una mejor leida al logcat que publicaste, parece que el error se genera a partir de un JSON mal leido/recibido/enviado es dificil saber ya que solo pusiste el logcat, pero segun eso es en la linea 62
  #8 (permalink)  
Antiguo 25/01/2013, 12:19
 
Fecha de Ingreso: septiembre-2008
Mensajes: 257
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Error al dal clic sobre un item

saludos, bueno sobre lo de cargar la consulta en el hilo principal no creo q sea ya que para evitar eso estoy utlizando asycntask.

Les pongo mi codigo javam el cual hace la consulta a la base, es decir este es el codigo q debe ejecutarse al hacer clic en el iten del listview...

Código:
package com.example.taller06oct;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class EditEmpleadosActivity extends Activity {

	TextView lblcedula;
	EditText txtNombre;
	EditText txtApellido;
	EditText txtSueldo;
	
	Button btnSave;
	Button btnDelete;

	String cedula;

	// Progress Dialog
	private ProgressDialog pDialog;

	// JSON parser class
	JSONParser jsonParser = new JSONParser();

	// single Empleado url - Reemplaza la IP de tu equipo o la direccion de tu servidor 
	// Si tu servidor es tu PC colocar IP Ej: "http://127.97.99.200/taller06oct/..", no colocar "http://localhost/taller06oct/.."
	private static final String url_detalles_empleado = "http://miweb/android/busqueda.php";
	

	// url to update Empleado - Reemplaza la IP de tu equipo o la direccion de tu servidor 
	private static final String url_actualizar_empleado = "http://miweb/android/actualizarempleado.php";
	
	// url to delete Empleado - Reemplaza la IP de tu equipo o la direccion de tu servidor 
	private static final String url_borrar_empleado = "http://miweb/android/borrarempleado.php";

	// JSON Node names
	private static final String TAG_SUCCESS = "success";
	private static final String TAG_EMPLEADOS = "empleado";
	private static final String TAG_CEDULA = "cedula";
	private static final String TAG_NOMBRE = "nombre";
	private static final String TAG_APELLIDO = "apellido";
	private static final String TAG_SUELDO = "sueldo";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.edit_empleado);

		// save button
		btnSave = (Button) findViewById(R.id.btnSave);
		btnDelete = (Button) findViewById(R.id.btnDelete);

		// getting Empleado details from intent
		Intent i = getIntent();
		
		// getting Empleado id (pid) from intent
		cedula = i.getStringExtra(TAG_CEDULA);

		// Getting complete Empleado details in background thread
		new GetEmpleadoDetails().execute();

		// save button click event
		btnSave.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// starting background task to update Empleado
				new SaveEmpleadoDetails().execute();
			}
		});

		// Delete button click event
		btnDelete.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// deleting Empleado in background thread
				new DeleteEmpleado().execute();
			}
		});

	}

	/**
	 * Background Async Task to Get complete Empleado details
	 * */
	class GetEmpleadoDetails extends AsyncTask<String, String, String> {

		/**
		 * Before starting background thread Show Progress Dialog
		 * */
		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			pDialog = new ProgressDialog(EditEmpleadosActivity.this);
			pDialog.setMessage("Loading Empleado details. Please wait...");
			pDialog.setIndeterminate(false);
			pDialog.setCancelable(true);
			pDialog.show();
		}

		/**
		 * Getting Empleado details in background thread
		 * */
		protected String doInBackground(String... params) {

			// updating UI from Background Thread
			runOnUiThread(new Runnable() {
				public void run() {
					// Check for success tag
					int success;
					try {
						// Building Parameters
						List<NameValuePair> params = new ArrayList<NameValuePair>();
						params.add(new BasicNameValuePair("cedula", cedula));

						// getting Empleado details by making HTTP request
						// Note that Empleado details url will use GET request
						JSONObject json = jsonParser.makeHttpRequest(
								url_detalles_empleado, "GET", params);
						//url_detalles_empleado, "GET","nombre","rosa");
						// check your log for json response
						Log.d("Single Empleado Details", json.toString());
						
						// json success tag
						success = json.getInt(TAG_SUCCESS);
						if (success == 1) {
							// successfully received Empleado details
							JSONArray EmpleadoObj = json
									.getJSONArray(TAG_EMPLEADOS); // JSON Array
							
							// get first Empleado object from JSON Array
							JSONObject Empleado = EmpleadoObj.getJSONObject(0);

							// Empleado with this pid found
							// Edit Text
							lblcedula = (TextView) findViewById(R.id.lblcedula);
							txtNombre = (EditText) findViewById(R.id.inputNombre);
							txtApellido = (EditText) findViewById(R.id.inputApellido);
							txtSueldo = (EditText) findViewById(R.id.inputSueldo);

							// display Empleado data in EditText
							lblcedula.setText(Empleado.getString(TAG_CEDULA));
							txtNombre.setText(Empleado.getString(TAG_NOMBRE));
							txtApellido.setText(Empleado.getString(TAG_APELLIDO));
							txtSueldo.setText(Empleado.getString(TAG_SUELDO));

						}else{
							// Empleado with pid not found
						}
					} catch (JSONException e) {
						e.printStackTrace();
					}
				}
			});

			return null;
		}


		/**
		 * After completing background task Dismiss the progress dialog
		 * **/
		protected void onPostExecute(String file_url) {
			// dismiss the dialog once got all details
			pDialog.dismiss();
		}
	}

	/**
	 * Background Async Task to  Save Empleado Details
	 * */
	class SaveEmpleadoDetails extends AsyncTask<String, String, String> {

		/**
		 * Before starting background thread Show Progress Dialog
		 * */
		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			pDialog = new ProgressDialog(EditEmpleadosActivity.this);
			pDialog.setMessage("Actualizando Empleado ...");
			pDialog.setIndeterminate(false);
			pDialog.setCancelable(true);
			pDialog.show();
		}

		/**
		 * Saving Empleado
		 * */
		protected String doInBackground(String... args) {

			// getting updated data from EditTexts
			
			String nombre = txtNombre.getText().toString();
			String apellido = txtApellido.getText().toString();
			String sueldo = txtSueldo.getText().toString();

			// Building Parameters
			List<NameValuePair> params = new ArrayList<NameValuePair>();
			params.add(new BasicNameValuePair(TAG_CEDULA, cedula));
			params.add(new BasicNameValuePair(TAG_NOMBRE, nombre));
			params.add(new BasicNameValuePair(TAG_APELLIDO, apellido));
			params.add(new BasicNameValuePair(TAG_SUELDO, sueldo));

			// sending modified data through http request
			// Notice that update Empleado url accepts POST method
			JSONObject json = jsonParser.makeHttpRequest(url_actualizar_empleado,
					"POST", params);

			// check json success tag
			try {
				int success = json.getInt(TAG_SUCCESS);
				
				if (success == 1) {
					// successfully updated
					Intent i = getIntent();
					// send result code 100 to notify about Empleado update
					setResult(100, i);
					finish();
				} else {
					// failed to update Empleado
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}

			return null;
		}


		/**
		 * After completing background task Dismiss the progress dialog
		 * **/
		protected void onPostExecute(String file_url) {
			// dismiss the dialog once Empleado uupdated
			pDialog.dismiss();
		}
	}

	/*****************************************************************
	 * Background Async Task to Delete Empleado
	 * */
	class DeleteEmpleado extends AsyncTask<String, String, String> {

		/**
		 * Before starting background thread Show Progress Dialog
		 * */
		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			pDialog = new ProgressDialog(EditEmpleadosActivity.this);
			pDialog.setMessage("Borrando Empleado...");
			pDialog.setIndeterminate(false);
			pDialog.setCancelable(true);
			pDialog.show();
		}

		/**
		 * Deleting Empleado
		 * */
		protected String doInBackground(String... args) {

			// Check for success tag
			int success;
			try {
				// Building Parameters
				List<NameValuePair> params = new ArrayList<NameValuePair>();
				params.add(new BasicNameValuePair("cedula", cedula));

				// getting Empleado details by making HTTP request
				JSONObject json = jsonParser.makeHttpRequest(
						url_borrar_empleado, "POST", params);

				// check your log for json response
				Log.d("Borrando Empleado", json.toString());
				
				// json success tag
				success = json.getInt(TAG_SUCCESS);
				if (success == 1) {
					// Empleado successfully deleted
					// notify previous activity by sending code 100
					Intent i = getIntent();
					// send result code 100 to notify about Empleado deletion
					setResult(100, i);
					finish();
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}

			return null;
		}

		/**
		 * After completing background task Dismiss the progress dialog
		 * **/
		protected void onPostExecute(String file_url) {
			// dismiss the dialog once Empleado deleted
			pDialog.dismiss();

		}

	}
}
  #9 (permalink)  
Antiguo 25/01/2013, 12:20
 
Fecha de Ingreso: septiembre-2008
Mensajes: 257
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Error al dal clic sobre un item

y este es el codigo del JSONParser.java


[CODE]
Código:
package com.example.taller06oct;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

	static InputStream is = null;
	static JSONObject jObj = null;
	static String json = "";

	// constructor
	public JSONParser() {

	}

	// function get json from url
	// by making HTTP POST or GET mehtod
	public JSONObject makeHttpRequest(String url, String method,
			List<NameValuePair> params) {

		// Making HTTP request
		try {
			
			// check for request method
			if(method == "POST"){
				// request method is POST
				// defaultHttpClient
				DefaultHttpClient httpClient = new DefaultHttpClient();
				HttpPost httpPost = new HttpPost(url);
				httpPost.setEntity(new UrlEncodedFormEntity(params));

				HttpResponse httpResponse = httpClient.execute(httpPost);
				HttpEntity httpEntity = httpResponse.getEntity();
				is = httpEntity.getContent();
				
			}else if(method == "GET"){
				// request method is GET
				DefaultHttpClient httpClient = new DefaultHttpClient();
				String paramString = URLEncodedUtils.format(params, "utf-8");
				url += "?" + paramString;
				HttpGet httpGet = new HttpGet(url);

				HttpResponse httpResponse = httpClient.execute(httpGet);
				HttpEntity httpEntity = httpResponse.getEntity();
				is = httpEntity.getContent();
			}			
			

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					is, "iso-8859-1"), 8);
			StringBuilder sb = new StringBuilder();
			String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line + "\n");
			}
			is.close();
			json = sb.toString();
		} catch (Exception e) {
			Log.e("Buffer Error", "Error converting result " + e.toString());
		}

		// try parse the string to a JSON object
		try {
			jObj = new JSONObject(json);
		} catch (JSONException e) {
			Log.e("JSON Parser", "Error parsing data " + e.toString());
		}

		// return JSON String
		return jObj;

	}
}

gracias de antemano por su ayuda...

Etiquetas: activity, clic, eclipse, item, java, todo, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:05.