Попробуйте перенести данные из Intent в ListView, но есть ошибка - PullRequest
0 голосов
/ 11 мая 2018

Мне уже помогли с этой проблемой, но теперь, когда я запускаю приложение, эта ошибка приходит.Через 2 часа все было хорошо, но я ничего не изменил, что это ??Я пытаюсь взять данные из Firestore и передать их в ListView, а затем перейти к следующему действию.

Ошибка:

Процесс: com.example.eugene.lafinalproduction, PID: 9741java.lang.IllegalArgumentException: n <= 0: 0 в java.util.Random.nextInt (Random.java:182) в com.example.eugene.lafinalproduction.ListViewPlaces $ 1.onComplete (ListViewPlaces.java:63) в com.google.android.gms.tasks.zzj.run (неизвестный источник) по адресу android.os.Handler.handleCallback (Handler.java:815) по адресу android.os.Handler.dispatchMessage (Handler.java:104) по адресу android.os.Looper.loop (Looper.java:207) на android.app.ActivityThread.main (ActivityThread.java:5763) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run (ZygoteInit.java:789) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:679) </p>

Ошибка в этой строке:

randomPlaceList.add(placesList.get(randomGenerator.nextInt(placeCount)));

Основная деятельность:

public class ListViewPlaces extends AppCompatActivity {

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference placesRef = rootRef.collection("Places");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_view_places);

    placesRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                List<Places> placesList = new ArrayList<>();
                for (DocumentSnapshot document : task.getResult()) {
                    Places places = document.toObject(Places.class);

                    placesList.add(places);
                }
                if (placesList.size() > 0) {
                    int placeCount = placesList.size();
                    System.out.println(placesList.size());
                    Random randomGenerator = new Random();
                    List<Places> randomPlaceList = new ArrayList<>();
                    for (int i = 0; i <= 3; i++) {
                        String randomIndex = randomGenerator.nextInt(randomPlaceList.size());
                        randomPlaceList.add(randomIndex);
                        ListView mListView = (ListView) findViewById(R.id.place_list);
                        PlacesAdapter placesAdapter = new PlacesAdapter(getApplicationContext(), randomPlaceList);
                        mListView.setAdapter(placesAdapter);
                    }
                }
        }
    }
});

}}

Класс модели:

    public class Places {
    private String name;

    public Places() {

    }

    public Places(String name) {

        this.name = name;


    }


    public String getName() { return name; }

Мой адаптер:

    class PlaceAdapter extends ArrayAdapter<Places> {

private ArrayList<Places> dataSet;
Context mContext;

private static class ViewHolder {
    TextView name_text;
    ImageView image_text;
}

public PlaceAdapter(ArrayList<Places> dataSet, Context context ) {
    super(context, R.layout.item_list, dataSet);

    this.dataSet = dataSet;
    this.mContext = context;

}

@Override
public View getView(int position, View converView, ViewGroup parent) {

    Places places = getItem(position);
    ViewHolder viewHolder;

    final View result;

    if (converView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        converView = inflater.inflate(R.layout.item_list, parent, false);
        viewHolder.name_text = (TextView) converView.findViewById(R.id.text_image_id);
        viewHolder.image_text = (ImageView) converView.findViewById(R.id.image_id);

        result = converView;

        converView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) converView.getTag();
        result = converView;
    }

    viewHolder.name_text.setText(places.getName());
    Glide.with(getContext()).load(places.getImage()).into(viewHolder.image_text);

    return converView;

И второе занятие:

public class Card_activity extends AppCompatActivity implements View.OnClickListener{

    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.massive_places);

        mTextView = findViewById(R.id.head_name);
        String name = getIntent().getStringExtras("name")
        mTextView.setText(name);
    }
}

1 Ответ

0 голосов
/ 11 мая 2018
int placeCount = placesList.size();

nextInt (int) создает число от 0 до n. Например, nextInt (3) может выдавать 0, 1 или 2. Поэтому значения <= 0 просто не имеют смысла. Это означает, что если <code>placecount равно <= 0, это вызывает исключение! Для проверки выведите placeCount и посмотрите, что возвращает переменная! </p>

границей - верхняя граница (исключая). Должен быть положительным. Edit:

for (int i = 1; i <= 3; i++) {
    if (placeCount >0) {
        randomPlaceList.add(placesList.get(randomGenerator.nextInt(placeCount)));          
    }
}

Другой способ будет:

    for (int i = 0; i < 3; i++) { 
       int randomIndex = randomGenerator.nextInt(randomPlaceList.size()); 
       Places item = randomPlaceList.get(randomIndex); 
       randomPlaceList.add(item); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...