Autore Topic: Problema con JSON e AsyncTask  (Letto 765 volte)

Offline Majestcx

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Ace, Next, S3 e Tablet Asus e il mitico OnePlus One *-*
  • Sistema operativo:
    Ubuntu 14.10, Windows 8.1
Problema con JSON e AsyncTask
« il: 21 Febbraio 2015, 18:37:51 CET »
0
Salve, ho un problema nel prendere i feed video con il JSON..

Ecco il codice:
Codice (Java): [Seleziona]
public class GetYoutubeList extends AsyncTask<Void, Void, Void>{
        @Override
        protected Void doInBackground(Void... params) {
            try
            {
                HttpClient httpclient = new DefaultHttpClient();
                httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
                HttpGet request = new HttpGet("https://gdata.youtube.com/feeds/api/users/{QUI L'UTENTE}/uploads?v=2&alt=jsonc&start-index=1&max-results=25");
                HttpResponse response = httpclient.execute(request);
                HttpEntity resEntity = response.getEntity();
                String _response= EntityUtils.toString(resEntity);

                JSONArray jsonArray = new JSONObject(_response).getJSONObject("data").getJSONArray("items");

                for(int x=0; x<jsonArray.length();x++){

                    JSONObject jsonObject = jsonArray.getJSONObject(x);

                    image_url.add(jsonObject.getJSONObject("thumbnail").getString("sqDefault"));
                    name.add(jsonObject.getString("title"));

                }
             }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
         try {
            //youtube_list.setAdapter(new CustomList(Main.here, name, image_url));
             for (int i = 0; i < 25; i++) {
                 Log.i("IMMAGINE", image_url.get(i));
                 Log.i("NOME", name.get(i));
             }
         }catch (Exception e){
             e.printStackTrace();
         }

            super.onPostExecute(aVoid);
        }
    }

E questo è l'errore:
Codice: [Seleziona]
02-21 18:32:48.345  25191-25414/com.skyonet.userapp W/System.err﹕ java.lang.NullPointerException
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at com.skyonet.userapp.Youtube$GetYoutubeList.doInBackground(Youtube.java:63)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at com.skyonet.userapp.Youtube$GetYoutubeList.doInBackground(Youtube.java:44)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-21 18:32:48.360  25191-25414/com.skyonet.userapp W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ java.lang.NullPointerException
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at com.skyonet.userapp.Youtube$GetYoutubeList.onPostExecute(Youtube.java:78)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at com.skyonet.userapp.Youtube$GetYoutubeList.onPostExecute(Youtube.java:44)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:632)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5146)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
02-21 18:32:48.360  25191-25191/com.skyonet.userapp W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)

Tutte le modifiche a quello che vedete, per esempio "{QUI L'UTENTE}" le ho fatte io, nel senso, non sono demente che lascio il API Json così  :-P  :-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con JSON e AsyncTask
« Risposta #1 il: 21 Febbraio 2015, 19:11:30 CET »
0
Una cosa che non mi torna è che nella OnPostExecute fai un ciclo di 25 iterazioni, quando ad occhio dovresti farlo della lunghezza degli array name,imagurl. Se ci sono meno oggetti di 25, mi torna il NullPointerException.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Majestcx

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Ace, Next, S3 e Tablet Asus e il mitico OnePlus One *-*
  • Sistema operativo:
    Ubuntu 14.10, Windows 8.1
Re:Problema con JSON e AsyncTask
« Risposta #2 il: 21 Febbraio 2015, 19:37:53 CET »
0
Una cosa che non mi torna è che nella OnPostExecute fai un ciclo di 25 iterazioni, quando ad occhio dovresti farlo della lunghezza degli array name,imagurl. Se ci sono meno oggetti di 25, mi torna il NullPointerException.

Oltre a quello, il NullPointException avviene nel "doInBackground", quando cerca di aggiungere i dati agli arrays..

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con JSON e AsyncTask
« Risposta #3 il: 21 Febbraio 2015, 20:06:32 CET »
0
Dovresti controllare che gli array non siano NULL e che quello che cerchi di aggiungere non sia NULL. Da codice intendo dire (con degli "if").
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Majestcx

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Ace, Next, S3 e Tablet Asus e il mitico OnePlus One *-*
  • Sistema operativo:
    Ubuntu 14.10, Windows 8.1
Re:Problema con JSON e AsyncTask
« Risposta #4 il: 21 Febbraio 2015, 20:22:02 CET »
0
Dovresti controllare che gli array non siano NULL e che quello che cerchi di aggiungere non sia NULL. Da codice intendo dire (con degli "if").

Ho provato, da sempre NullPointException..
(Questa è la modifica:
Codice (Java): [Seleziona]
for(int x=0; x<jsonArray.length();x++){

                    JSONObject jsonObject = jsonArray.getJSONObject(x);

                    if(jsonObject.getString("title") != null)
                    name.add(jsonObject.getString("title"));

                    if(jsonObject.getJSONObject("thumbnail").getString("sqDefault") != null)
                    image_url.add(jsonObject.getJSONObject("thumbnail").getString("sqDefault"));

                }
)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema con JSON e AsyncTask
« Risposta #5 il: 22 Febbraio 2015, 08:47:10 CET »
0
In quale rigo esattamente? (leggi nel logcat)

Sicuro che jsonObject non sia null?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Majestcx

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Ace, Next, S3 e Tablet Asus e il mitico OnePlus One *-*
  • Sistema operativo:
    Ubuntu 14.10, Windows 8.1
Re:Problema con JSON e AsyncTask
« Risposta #6 il: 22 Febbraio 2015, 12:45:42 CET »
0
In quale rigo esattamente? (leggi nel logcat)

Sicuro che jsonObject non sia null?

Sicuro, guarda per esempio qui:
"https://gdata.youtube.com/feeds/api/users/youtube/uploads?v=2&alt=jsonc&start-index=1&max-results=25"


Le righe sono:
Codice (Java): [Seleziona]
name.add(jsonObject.getString("title"));
                    image_url.add(jsonObject.getJSONObject("thumbnail").getString("sqDefault"));


O provado ad aggiungere un "Log.i" e il title compare, quindi il problema è che non lo aggiunge all'ARRAY.

Per assurdo, ho messo:
Codice (Java): [Seleziona]
name[x] = "Miao";, mi da il NullPointException. Mi sta prendendo per il cul*?

Post unito: 22 Febbraio 2015, 17:41:12 CET
Ok, ho semplicemente inizializzato i 2 array.
« Ultima modifica: 22 Febbraio 2015, 17:41:12 CET da Majestcx, Reason: Merged DoublePost »

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Problema con JSON e AsyncTask
« Risposta #7 il: 24 Febbraio 2015, 10:21:31 CET »
0
A mio parere devi scomporre

Codice (Java): [Seleziona]
    jsonObject.getJSONObject("thumbnail").getString("sqDefault")
se jsonObject.getJSONObject("thumbnail") ritorna NULL, fai getString su un oggetto NULL.