Android loopj + GCMIntentService enviar mensaje a un Handler en un hilo muerto

Estoy tratando de implementar GCMIntentService en mi aplicación Android.

Cuando intenté ahorrar la identificación del registro en mi base de datos, el asynthttp que muestra el error siguiente " sending message to a Handler on a dead thread"

El siguiente es mi código

 import com.google.android.gcm.GCMBaseIntentService; public class GCMIntentService extends GCMBaseIntentService { ProgressBar progress; AlertDialog.Builder builder; AlertDialog dialog; Context context; Integer flags=0; String regId; public GCMIntentService() { super(SENDER_ID); } private static final String TAG = "===GCMIntentService==="; @Override protected void onRegistered(Context arg0, String registrationId) { Log.i(TAG, "Device registered at raj: regId = " + registrationId); tes(registrationId); } @Override protected void onUnregistered(Context arg0, String arg1) { //Log.i(TAG, "unregistered = "+arg1); } @Override protected void onMessage(Context arg0, Intent arg1) { Log.i(TAG, "new message= "+arg0); Bundle extras = arg1.getExtras(); String tat=extras.getString("msg"); JSONObject jsono = stringToJsonobj(tat.toString()); try { String message=jsono.getString("price"); generateNotification(arg0, message); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void onError(Context arg0, String errorId) { Log.i(TAG, "Received error: " + errorId); } @Override protected boolean onRecoverableError(Context context, String errorId) { return super.onRecoverableError(context, errorId); } private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } public JSONObject stringToJsonobj(String result) { JSONObject jObj = null; try { jObj = new JSONObject(result); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } return jObj; } private static void generateNotification(Context context, String message) { long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher, message, when); String title = "Test Application"; Intent notificationIntent = new Intent(context, MainActivity.class); notificationIntent.putExtra("message", message); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.defaults|= Notification.DEFAULT_LIGHTS; notification.defaults|= Notification.DEFAULT_VIBRATE; notification.flags |= Notification.DEFAULT_LIGHTS; notificationManager.notify(0, notification); } protected void tes(final String regId){ ConnectionDetector cd= new ConnectionDetector(getApplicationContext()); String domain = cd.getUrl(); SharedPreferences mPrefs=getSharedPreferences("prefs",0); String token = mPrefs.getString("access_token", ""); AsyncHttpClient client = new AsyncHttpClient(); RequestParams webparams = new RequestParams(); webparams.put("fn", "loginProcess"); webparams.put("email","username" ); webparams.put("password", "password"); client.post(domain, webparams, new AsyncHttpResponseHandler() { @Override public void onStart() { Log.v("Start","Started-"+regId+"-User Id-"+regId); } @Override public void onSuccess(String response) { dialog.dismiss(); Log.v("response",""+response); try { JSONObject obj = new JSONObject(response); Integer status=obj.getInt("result"); String message=obj.getString("message"); if(status==1){ // Success Integer success=obj.getInt("success"); if(success==1){ Integer registered=obj.getInt("login"); if(registered==1){ /* Session Save */ } else { } } else { //setEr("Something went wrong. Please try again."); } } else { //setEr("Something went wrong. Please try again."); } } catch (Throwable t) { } } @Override public void onFailure(Throwable e, String response) { //setEr("Something went wrong. Please try again."); } }); return; } 

Alguna idea ? Por favor ayuda

Gracias por adelantado

El error viene porque usted está haciendo la llamada de Async en IntentService, se cerciora de utilizar la llamada de la sinc. En el servicio de la intención, había funcionado en el mismo problema y lo resolvió haciendo Sync. Vea a continuación el ejemplo de la llamada de sincronización en Loopj Lib.

Método de registro de GCM

 @Override protected void onRegistered(final Context context, final String registrationId) { final String userID = AIBSharedPreference.getInstance(context).getStringValue(StringConstants.PREF_USER_ID, null); if (null != userID) { WSUtils.registerGCMID(registrationId, userID); } } 

WS Llame para guardar ID de registro.

 public static void registerGCMID(final String regID, final String userID) { final RequestParams params = new RequestParams(); params.put(WSConstant.PRM_USER_ID, userID); params.put(WSConstant.PRM_DEVICE_ID, regID); AppInBoxWS.syncPost("update_device_id", params); } 

WS Ayudante Clase "AppInBoxWS"

 public class AppInBoxWS { private static SyncHttpClient syncClient = new SyncHttpClient() { @Override public String onRequestFailed(final Throwable error, final String content) { return null; } }; private static String getAbsoluteUrl(final String relativeUrl) { return WS_BASE_URL + relativeUrl; } public static String syncPost(final String url, final RequestParams params) { return syncClient.post(getAbsoluteUrl(url), params); } } 
  • Cómo saber cuándo finaliza una llamada de Retrofit
  • No se pueden llamar métodos de servicio web desde el emulador de proyectos android
  • Enviar una imagen de Android a un servicio Web ASP.NET
  • Llame al servicio web .NET en Android
  • Analizador de XML común de Android
  • Conectar con un emulador de Android a la localhost webservice
  • No se puede deserializar la instancia del objeto de START_ARRAY token en Spring Webservice
  • Cómo utilizar el tipo de llamada con EventBus
  • Analizando la respuesta ksoap2
  • KSoap2 Android recibe un arreglo de objetos
  • Envío de XML a un servicio web en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.