Autore Topic: stringa troppo grande per invio  (Letto 477 volte)

Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
stringa troppo grande per invio
« il: 08 Febbraio 2012, 18:27:28 CET »
0
Salve utilizzo un oggetto JSON per inviare dei dati e delle foto ad un server, solo che se inserisco due foto ci va già da tre non va è ho capito che è un problema di ooutofmemory, sto cercando una soluzione ma non so proprio come fare, l'unica cosa che mi viene da fare è comprimere di piu le foto attualmente è
Codice (Java): [Seleziona]
img.compress(Bitmap.CompressFormat.JPEG, 90, byteArrayOutputStream);
se questa secondo voi può essere una "soluzione" fin quando mi consigliate di comprimere??

Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:stringa troppo grande per invio
« Risposta #1 il: 08 Febbraio 2012, 18:42:21 CET »
0
Vi posto più codice:
Codice (Java): [Seleziona]
        JSONObject object = new JSONObject();
                                               
                                                // ...
                                             

                                                try {
                                               
                                                 
                                                       
                                                        POI poi=POI.getInstance();
                                                        Foto nuovo=Foto.getInstance();
                                                        HashMap <String,String> arrayFoto=new HashMap <String,String>();
                                                        arrayFoto=codificaFoto(nuovo.getFoto());
                                               
                                                        object.put("arrayFoto", arrayFoto);
             
                                                       
                                                } catch (JSONException e) {
                                                        // TODO Auto-generated catch block
                                                        e.printStackTrace();
                                                }
                                               
                                                String json = object.toString();
                                                 Log.i("test", json);
                                       
                                                try{    
                                            HttpClient httpclient = new DefaultHttpClient();
                                           
                                         HttpPost httppost = new HttpPost("");//qui ci dovrebbe andare localhost
                                         httppost.setEntity(new UrlEncodedFormEntity(null));//qui nn capisco se ci dovrebbe andare la stringa json
                                         HttpResponse response = httpclient.execute(httppost);
                                         HttpEntity entity = response.getEntity();
                                         InputStream is = entity.getContent();
                                       
                                         
                                         }catch(Exception e){
                                             
                                             Toast toast2 = Toast.makeText(v.getContext(),
                                                                    "Errore nella connessione HTTP !",
                                                                    Toast.LENGTH_SHORT);
                                             toast2.show();
                                           
                                        }



dove la funzione codificaFoto è:
Codice (Java): [Seleziona]
public String codifica(Bitmap img){
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                img.compress(Bitmap.CompressFormat.JPEG, 90, byteArrayOutputStream); /* al momento testo con una sola foto */
                byte [] ba = byteArrayOutputStream.toByteArray();
                String baString = Base64.encodeToString(ba,Base64.DEFAULT);
                return baString;
        }
        public HashMap<String,String> codificaFoto(ArrayList<Bitmap> foto){
               
                int dim=foto.size();
                HashMap <String,String> arrayFoto = new HashMap <String,String> ();
                String cod1,cod2,cod3,cod4,cod5,cod6,cod7,cod8;
                switch(dim){
                        case 0:
                                break;
                        case 1:
                               
                       
                        cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);                            
                       
                                break;
                        case 2:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                                break;
                        case 3:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                        cod3=codifica(foto.get(2));
                        arrayFoto.put("foto3", cod3);
                                break;
                        case 4:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                        cod3=codifica(foto.get(2));
                        arrayFoto.put("foto3", cod3);
                        cod4=codifica(foto.get(3));
                        arrayFoto.put("foto4", cod4);
                       
                                break;
                        case 5:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                        cod3=codifica(foto.get(2));
                        arrayFoto.put("foto3", cod3);
                        cod4=codifica(foto.get(3));
                        arrayFoto.put("foto4", cod4);
                        cod5=codifica(foto.get(4));
                        arrayFoto.put("foto5", cod5);
                       
                                break;
                        case 6:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                        cod3=codifica(foto.get(2));
                        arrayFoto.put("foto3", cod3);
                        cod4=codifica(foto.get(3));
                        arrayFoto.put("foto4", cod4);
                        cod5=codifica(foto.get(4));
                        arrayFoto.put("foto5", cod5);
                        cod6=codifica(foto.get(5));
                        arrayFoto.put("foto6", cod6);
                                break;
                        case 7:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                        cod3=codifica(foto.get(2));
                        arrayFoto.put("foto3", cod3);
                        cod4=codifica(foto.get(3));
                        arrayFoto.put("foto4", cod4);
                        cod5=codifica(foto.get(4));
                        arrayFoto.put("foto5", cod5);
                        cod6=codifica(foto.get(5));
                        arrayFoto.put("foto6", cod6);
                        cod7=codifica(foto.get(6));
                        arrayFoto.put("foto7", cod7);
                                break;
                        case 8:
                                cod1=codifica(foto.get(0));
                        arrayFoto.put("foto1", cod1);
                                cod2=codifica(foto.get(1));
                        arrayFoto.put("foto2", cod2);
                        cod3=codifica(foto.get(2));
                        arrayFoto.put("foto3", cod3);
                        cod4=codifica(foto.get(3));
                        arrayFoto.put("foto4", cod4);
                        cod5=codifica(foto.get(4));
                        arrayFoto.put("foto5", cod5);
                        cod6=codifica(foto.get(5));
                        arrayFoto.put("foto6", cod6);
                        cod7=codifica(foto.get(6));
                        arrayFoto.put("foto7", cod7);
                        cod8=codifica(foto.get(7));
                        arrayFoto.put("foto8", cod8);
                               
                                break;
               
                }
                return arrayFoto;
        }
       

Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:stringa troppo grande per invio
« Risposta #2 il: 08 Febbraio 2012, 18:52:27 CET »
0
Vi posto anche il relativo logcat:
Codice: [Seleziona]
02-08 18:50:45.085: W/dalvikvm(4435): threadid=1: thread exiting with uncaught exception (group=0x40015578)
02-08 18:50:45.089: E/AndroidRuntime(4435): FATAL EXCEPTION: main
02-08 18:50:45.089: E/AndroidRuntime(4435): java.lang.OutOfMemoryError
02-08 18:50:45.089: E/AndroidRuntime(4435):         at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:140)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at java.lang.StringBuilder.append(StringBuilder.java:125)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at org.json.JSONStringer.string(JSONStringer.java:344)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at org.json.JSONStringer.value(JSONStringer.java:252)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at org.json.JSONObject.writeTo(JSONObject.java:667)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at org.json.JSONObject.toString(JSONObject.java:636)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at io.francesco.tesi.Utente$2.onClick(Utente.java:201)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at android.view.View.performClick(View.java:2538)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at android.view.View$PerformClick.run(View.java:9152)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at android.os.Handler.handleCallback(Handler.java:587)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at android.os.Looper.loop(Looper.java:123)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at android.app.ActivityThread.main(ActivityThread.java:3687)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at java.lang.reflect.Method.invokeNative(Native Method)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at java.lang.reflect.Method.invoke(Method.java:507)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-08 18:50:45.089: E/AndroidRuntime(4435):         at dalvik.system.NativeStart.main(Native Method)


Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:stringa troppo grande per invio
« Risposta #3 il: 08 Febbraio 2012, 19:13:19 CET »
0
Secondo voi per risolvere il problema è possibile usare lo steaming per l'invio dei dati???  ho trovato qualcosa in rete:

Codice (Java): [Seleziona]
 1 JsonFactory f = new JsonFactory();
   2 JsonGenerator g = f.createJsonGenerator(new File("user.json"));
   3
   4 g.writeStartObject();
   5 g.writeObjectFieldStart("name");
   6 g.writeStringField("first", "Joe");
   7 g.writeStringField("last", "Sixpack");
   8 g.writeEndObject(); // for field 'name'
   9 g.writeStringField("gender", Gender.MALE);
  10 g.writeBooleanField("verified", false);
  11 g.writeFieldName("userImage"); // no 'writeBinaryField' (yet?)
  12 byte[] binaryData = ...;
  13 g.writeBinary(binaryData);
  14 g.writeEndObject();
  15 g.close(); // important: will force flushing of output, close underlying output stream

qualcuno ne sa qualcosa???

Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:stringa troppo grande per invio
« Risposta #4 il: 08 Febbraio 2012, 19:35:43 CET »
0
sarebbe possibile inviare più oggetti json in una richiesta HTTP???
 
Nessuno può aiutarmi???

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:stringa troppo grande per invio
« Risposta #5 il: 08 Febbraio 2012, 20:22:57 CET »
0
Puoi usare il tasto edit e postare tutto in un post solo? E aspettare pazientemente che qualcuno ti risponda. ;)

Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
Re:stringa troppo grande per invio
« Risposta #6 il: 08 Febbraio 2012, 21:24:14 CET »
0
scusami non lo sapevo! :-)