2013-05-08 4 views
-6

В приведенном ниже коде я получил сообщение об ошибке при запуске моего проекта Android для отправки json на cloudant.com со второго макета, quiero mandar json desde android en un segundo layout pero me manda el error android .os.NetworkOnMainThreadException Цена от эль LogCatandroid.os.NetworkOnMainThreadException json android

//Obtenemos una referencia al LocationManager 
    locManager = 
     (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    //Obtenemos la última posición conocida 
    final Location loc = 
     locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 



    // buton ejecuta 
    btnActualizar.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     // comenzarLocalizacion(); 



      HttpPost request = new HttpPost("https://tonatiuhnava.cloudant.com/android/"); 
      request.addHeader("Content-Type", "application/json"); 
      request.addHeader("Authorization", "Basic " + Base64.encodeToString("tonatiuhnava:70n471uh".getBytes(), Base64.NO_WRAP)); 
      JSONObject cadena = new JSONObject(); 

      if(loc != null) 
      { 

      try{ 
       cadena.put("nombre", "tonatiuhNava");//Le asignamos los datos que necesitemos 
       cadena.put("Category", new Integer(01)); 
       cadena.put("Event", new Integer(201)); 

       cadena.put("Fecha",curTime); 
       //cadena.put("Fecha", currentDate.toGMTString()); 
       cadena.put("longitud", new Double(loc.getLongitude())); 
       cadena.put("Latitud", new Double(loc.getLatitude())); 

      } catch (JSONException e) 
      { 
       Log.d("WAZAAA" , "error json"); 

      } 

      try{ 
       request.setEntity(new StringEntity( cadena.toString())); 

      } catch (Exception e){ 
       Log.d("WAZAAA" , "error entity"); 

      } 

      DefaultHttpClient connection = new DefaultHttpClient(); 
      try{ 
      Log.d("WAZAAA" , "haciendo request"); 

      HttpResponse execute = connection.execute(request); 
      Log.d("WAZAAA" , "request hecho"); 

      byte[] bytes = new byte[1000]; 
      int numRead = 0; 
      StringBuilder x = new StringBuilder(); 
      InputStream stream = execute.getEntity().getContent(); 
      stream.read(bytes); 
      x.append(new String(bytes, 0, numRead)); 



      Log.d("WAZAAA" , execute.getStatusLine().getReasonPhrase()); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       Log.e("WAZAAA" , "client error"); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       Log.e("Internet Please :..(" , "IO error"); 
      } 
      Log.d("WAZAAA" , "fin"); 

      // termina if 
      }else { 
       Context context = getApplicationContext(); 
       CharSequence text = "Espere a que cargue coordenadas..."; 
       int duration = Toast.LENGTH_SHORT; 

       Toast toast = Toast.makeText(context, text, duration); 
       toast.show(); 


      } 

     } 

ответ

2

Блокирующие запросов не может работать на UI тему, они должны работать в отдельном потоке. Используйте AsyncTask. Прочитано this.

+0

AsyncTask? один пример? – tonatiuhNava

+0

читайте руководство. – Blackbelt

Смежные вопросы