Autore Topic: DoInBackground : valore null anche se non c'è nessuna riga di codice  (Letto 507 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 322
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Salve a tutti!

Mentre eseguivo il mio AsyncTask mi sono ritrovato questo errore nel logcat:
Codice: [Seleziona]
03-03 08:26:40.026    1020-1038/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
            at java.util.concurrent.FutureTask.run(FutureTask.java:239)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
            at com.example.adorni.NevianoApp.Ristoranti$GetInfo.doInBackground(Ristoranti.java:72)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)


ho fatto varie prove (anche a commentare l'intero codice contenuto nel doInBackground) e continuava a crashare dandomi sempre lo stesso errore, allora ho commentato il mio doInBackground e ne ho creato un'altro "base" cioè solo con un return null.
Però continua a crashare sempre dandomi quell'errore nel logcat.

Questo è il java che uso per l'AsyncTask :
Codice (Java): [Seleziona]
 protected class GetInfo extends AsyncTask<String, Void,String> {

        @Override
        protected String doInBackground(String... params) {
            return null;
        }

        protected void onPreExecute() {

            listView = (ListView) findViewById(R.id.listView);
            back = (ImageButton) findViewById(R.id.Back);
            TextView title = (TextView) findViewById(R.id.Titolo);

            Typeface header = Typeface.createFromAsset(getAssets(),"fonts/AveriaSerifLibre-LightItalic.ttf");
            title.setTypeface(header);

            if (Lingua.ita == 1 || Lingua.eng == 0) {
                title.setText("Ristoranti");
            }
            if (Lingua.ita == 0 || Lingua.eng == 1) {
                title.setText("Restaurants");
            }

            back.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(Ristoranti.this,R.layout.rowristoranti,
                    R.id.Nome, Lingua.dbristoranteName);
            listView.setAdapter(adapter);


            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    // ListView Clicked item index
                    int itemPosition = position;

                    // ListView Clicked item value
                    String itemValue = (String) listView.getItemAtPosition(position);

                    Intent SingleRistoranti = new Intent(Ristoranti.this, Ristorante.class);
                    SingleRistoranti.putExtra("Nome", itemValue);
                    startActivity(SingleRistoranti);
                }
            });
        }

     /*   @Override
        protected String doInBackground(String... params) {

            for (int i = 0;i<Lingua.dbristoranteName.length; i++) {

                Double lat1 = 44.572106, lng1 = 10.369672, lat2 = 44.519423, lng2 = 10.298754;
                String url = ("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lng1 + "&destination=" + Lingua.dbristoranteLat[i] + "," + Lingua.dbristoranteLong[i] + "&sensor=false&units=metric");

                String qResult = "";
                HttpClient Client = new DefaultHttpClient();
                HttpContext localContext = new BasicHttpContext();

                HttpGet httpget = new HttpGet(url);

                try {
                    HttpResponse response = Client.execute(httpget, localContext);
                    HttpEntity entity = response.getEntity();

                    if (entity != null) {
                        InputStream stream = entity.getContent();
                        Reader in = new InputStreamReader(stream);
                        BufferedReader buffreader = new BufferedReader(in);
                        StringBuilder Builder = new StringBuilder();
                        String StringReadLine = null;
                        while ((StringReadLine = buffreader.readLine()) != null) {
                            Builder.append(StringReadLine + "\n");
                        }
                        qResult = Builder.toString();
                    }
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                    Toast.makeText(Ristoranti.this, e.toString(), Toast.LENGTH_LONG)
                            .show();
                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(Ristoranti.this, e.toString(), Toast.LENGTH_LONG)
                            .show();
                }

                JSONObject jsonObject = new JSONObject();
                try {

                    jsonObject = new JSONObject(qResult);

                    JSONArray array = jsonObject.getJSONArray("routes");

                    JSONObject routes = array.getJSONObject(0);

                    JSONArray legs = routes.getJSONArray("legs");

                    JSONObject steps = legs.getJSONObject(0);

                    JSONObject distance = steps.getJSONObject("distance");

                    Log.i("Distance", distance.toString());
                    if(i==0) {
                        dist2=(distance.getString("text").replaceAll("[^\\.0123456789]", ""));
                    }
                    if(i!=0){
                        dist2 =dist2+","+ (distance.getString("text").replaceAll("[^\\.0123456789]", ""));
                    }

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();

                }
            }
                return dist2;

            }*/



        protected void onPostExecute(String result) {
           //lista();

            // Define a new Adapter
            // First parameter - Context
            // Second parameter - Layout for the row
            // Third parameter - ID of the TextView to which the data is written
            // Forth - the Array of data
            if(!dist2.equals("")){

            String[] split=dist2.split(",");

            ArrayList<User> arrayOfUsers= new ArrayList<User>();
            RistorantiUsersAdapter adapter2 = new RistorantiUsersAdapter(Ristoranti.this, arrayOfUsers);

            for(int i=0;i<Lingua.dbristoranteName.length;i++) {
                split[i]=split[i]+"km";
                User newUser = new User(Lingua.dbristoranteName[i], split[i]);
                adapter2.add(newUser);
            }
                // Assign adapter to ListView
                listView.setAdapter(adapter2);
            }
        }
    }

Avete suggerimenti?

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:DoInBackground : valore null anche se non c'è nessuna riga di codice
« Risposta #1 il: 03 Marzo 2015, 09:40:14 CET »
0
Direi che alla doInBackground viene passato un array di Object non castabili a String.

Come chiami l'AsynchTask?


Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 322
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:DoInBackground : valore null anche se non c'è nessuna riga di codice
« Risposta #2 il: 03 Marzo 2015, 10:37:15 CET »
0
Direi che alla doInBackground viene passato un array di Object non castabili a String.

Come chiami l'AsynchTask?



Subito lo dichiaravo così:
Codice (Java): [Seleziona]
AsyncTask mytask=new GetInfo();
mytask.execute();

poi ho provato a cambiarlo così:
Codice (Java): [Seleziona]
new GetInfo().execute();
e ha cominciato ad andare perfettamente.
Scusa se non lo ho scritto prima ma il browser diceva che il sito era down per il troppo traffico(?)
alla fine ho risolto, ma c'è davvero così tanta differenza tra le due dichiarazioni?

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:DoInBackground : valore null anche se non c'è nessuna riga di codice
« Risposta #3 il: 03 Marzo 2015, 12:09:10 CET »
0
Che io sappia nessuna, ma, per come l'hai dichiarata, dovresti chiamarla con parametri String

tipo:

Codice (Java): [Seleziona]
    AsyncTask mytask=new GetInfo();
    mytask.execute( "Pippo" );

oppure prova a dichiararlo come:

Codice (Java): [Seleziona]
 ... extends AsyncTask<Void, Void, Void>
Ciao
« Ultima modifica: 03 Marzo 2015, 12:11:10 CET da arlabs »

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:DoInBackground : valore null anche se non c'è nessuna riga di codice
« Risposta #4 il: 04 Marzo 2015, 19:08:17 CET »
0
Anzi meglio così:

Codice (Java): [Seleziona]
    AsyncTask mytask=new GetInfo();
    mytask.execute( new String[]{"pippo"} );