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"
- HttpURLConnection getResponseCode () deos no devuelve si no hay conexión a Internet
- Mejor manera de crear un servicio Web en Android
- Envío de imágenes de la galería al servicio web mediante SOAP
- ¿Cómo puedo convertir los datos de InputStream en String en SOAP Webservices de Android
- Interacción entre Java y Android
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
- Cómo sincronizar grandes listas entre cliente y servidor
- Cómo pasar String array a webservice usando ksoap2?
- Cómo manejar la conexión de red lenta en Java / Android
- Android: ksoap, "UnknownHostException: host no resuelto" dependiendo de la API
- KSOAP2 java.lang.RuntimeException: No se puede serializar
- Problema del API del cliente Jersey
- Java.net.UnknownHostException: No se puede resolver el host "<url>": ninguna dirección asociada con hostname y End of input en el carácter 0 de
- Respuesta de retorno de loopj asynchttpclient de Android
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); } }
- Android Studio Archivos duplicados copiados en APK META-INF / BCKEY.DSA
- Reproducir el audio del micrófono en tiempo real