Autore Topic: Errore ListView  (Letto 280 volte)

Offline Ayo

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Errore ListView
« il: 27 Luglio 2016, 16:51:54 CEST »
0
Salve a tutti, oggi sono andato a creare una listview ma mi da il seguente errore:

Codice: [Seleziona]
07-27 16:47:04.479 7498-7498/com.appbar E/AndroidRuntime: FATAL EXCEPTION: main
                                                          Process: com.appbar, PID: 7498
                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appbar/com.appbar.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2441)
                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)
                                                              at android.app.ActivityThread.access$900(ActivityThread.java:171)
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                              at android.os.Looper.loop(Looper.java:146)
                                                              at android.app.ActivityThread.main(ActivityThread.java:5679)
                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                              at java.lang.reflect.Method.invoke(Method.java:515)
                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
                                                              at dalvik.system.NativeStart.main(Native Method)
                                                           Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                              at com.appbar.MainActivity.onCreate(MainActivity.java:30)
                                                              at android.app.Activity.performCreate(Activity.java:5582)
                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2405)
                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500) 
                                                              at android.app.ActivityThread.access$900(ActivityThread.java:171) 
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                              at android.os.Looper.loop(Looper.java:146) 
                                                              at android.app.ActivityThread.main(ActivityThread.java:5679) 
                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                              at java.lang.reflect.Method.invoke(Method.java:515) 
                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
                                                              at dalvik.system.NativeStart.main(Native Method) 


Questi sono i codici che ho utilizzato

MainActivity
Codice (Java): [Seleziona]
package com.appbar;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
    Toolbar toolbar;
    ListView listView;
    int[] movie_poster_resource = {R.drawable.italia};
    String[] movie_titles;
    String[] movie_ratings;
    MovieAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        listView = (ListView) findViewById(R.id.list_view);
        movie_ratings = getResources().getStringArray(R.array.movie_ratings);
        movie_titles = getResources().getStringArray(R.array.movie_titles);
        int i=0;
        adapter = new MovieAdapter(getApplicationContext(),R.layout.row_layout);
        listView.setAdapter(adapter);
        for(String titles: movie_titles)
        {
            MovieDataProvider dataProvider = new MovieDataProvider(movie_poster_resource[i],
                    titles,movie_ratings[i]);
            adapter.add(dataProvider);
            i++;
        }
    }
}

MovieAdapter
Codice (Java): [Seleziona]
package com.appbar;

import android.content.Context;
import android.media.Image;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Ayoub on 20/07/2016.
 */

public class MovieAdapter extends ArrayAdapter {
    List list = new ArrayList();

    public MovieAdapter(Context context, int resource) {
        super(context, resource);
    }
    static class DataHandler
    {

        ImageView Poster;
        TextView title;
        TextView rating;
    }
    @Override
    public void add(Object object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return this.list.size();
    }

    @Override
    public Object getItem(int position) {
        return this.list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View row;
        row = convertView;
        DataHandler handler;
        if(convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.row_layout,parent,false);
            handler = new DataHandler();
            handler.Poster = (ImageView) row.findViewById(R.id.movie_poster);
            handler.title = (TextView) row.findViewById(R.id.movie_title);
            handler.rating = (TextView) row.findViewById(R.id.movie_rating);
            row.setTag(handler);
        }
        else
        {
            handler = (DataHandler) row.getTag();
        }
        MovieDataProvider dataProvider;
        dataProvider = (MovieDataProvider) this.getItem(position);
        handler.Poster.setImageResource(dataProvider.getMovie_poster_resource());
        handler.title.setText(dataProvider.getMovie_title());
        handler.rating.setText(dataProvider.getMovie_rating());

        return row;
    }
}

MovieDataProvider

Codice (Java): [Seleziona]
package com.appbar;

/**
 * Created by Ayoub on 20/07/2016.
 */

public class MovieDataProvider
{
    private int movie_poster_resource;
    private String movie_title;
    private String movie_rating;

    public int getMovie_poster_resource() {
        return movie_poster_resource;
    }

    public void setMovie_poster_resource(int movie_poster_resource) {
        this.movie_poster_resource = movie_poster_resource;
    }

    public String getMovie_title() {
        return movie_title;
    }

    public void setMovie_title(String movie_title) {
        this.movie_title = movie_title;
    }

    public String getMovie_rating() {
        return movie_rating;
    }

    public MovieDataProvider(int movie_poster_resource, String movie_title, String movie_rating)
    {
        this.setMovie_poster_resource(movie_poster_resource);
        this.setMovie_title(movie_title);
        this.setMovie_rating(movie_rating);
    }

    public void setMovie_rating(String movie_rating) {
        this.movie_rating = movie_rating;
    }
}

Come risolvo questo problema?

Grazie mille  :-)

Offline iClaude

  • Utente normale
  • ***
  • Post: 177
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Errore ListView
« Risposta #1 il: 28 Luglio 2016, 10:02:44 CEST »
0
L'array movie_poster_resource ha un solo elemento, per cui l'indice massimo che può avere é 0.
L'errore è probabilmente qua:
for(String titles: movie_titles)
        {
            MovieDataProvider dataProvider = new MovieDataProvider(movie_poster_resource,
                    titles,movie_ratings);
            adapter.add(dataProvider);
            i++;
        }

perché l'indice i viene incrementato ad ogni iterazione se movie_titles contiene più elementi.

Offline Ayo

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Errore ListView
« Risposta #2 il: 29 Luglio 2016, 00:53:39 CEST »
0
L'array movie_poster_resource ha un solo elemento, per cui l'indice massimo che può avere é 0.
L'errore è probabilmente qua:
for(String titles: movie_titles)
        {
            MovieDataProvider dataProvider = new MovieDataProvider(movie_poster_resource,
                    titles,movie_ratings);
            adapter.add(dataProvider);
            i++;
        }

perché l'indice i viene incrementato ad ogni iterazione se movie_titles contiene più elementi.

Ho provato a rimuovere "i++;" e l'app funziona ma mi visualizza metà oggetto
Con metà oggetto intendo che mi visualizza, per esempio, metà rettangolo invece di un rettangolo completo
Come posso sistemare?

Offline iClaude

  • Utente normale
  • ***
  • Post: 177
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Errore ListView
« Risposta #3 il: 29 Luglio 2016, 08:42:22 CEST »
0
Il tuo array movie_poster_resource ha un solo elemento, quindi o usi sempre quello:
movie_poster_resource[0]

oppure ci metti dentro altri elementi per fare in modo che abbia una lunghezza uguale a movie _titles

Dipende da cosa fa quel codice: non lo posso sapere 😎

Offline Ayo

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Errore ListView
« Risposta #4 il: 29 Luglio 2016, 14:31:25 CEST »
0
Il tuo array movie_poster_resource ha un solo elemento, quindi o usi sempre quello:
movie_poster_resource[0]

oppure ci metti dentro altri elementi per fare in modo che abbia una lunghezza uguale a movie _titles

Dipende da cosa fa quel codice: non lo posso sapere 😎

Problema risolto riguardante la ListView ma non capisco come distanziare un rettangolo dall'altro
Come posso fare?
Ho il primo rettangolo attaccato all'ActionBar ma lo vorrei distanziare un po

Offline DCode

  • Utente junior
  • **
  • Post: 69
  • Respect: +20
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 16.04 LTS
Re:Errore ListView
« Risposta #5 il: 29 Luglio 2016, 14:40:15 CEST »
0
Puoi mettere un po' di padding negli elementi della ListView oppure un marginTop nella ListView per staccarla un po' dalla ActionBar  ;-)
┻━┻ ︵ヽ(°□°ヽ) Develop w/ ( ( ObjC || Swift ) && Java[ "Android" ] ) (╯°□°)╯︵ ┻━┻