Intereting Posts

Передача ArrayList через намерение

Я пытаюсь передать arrayList в другое действие, используя намерения. Вот код в первом действии.

case R.id.editButton: Toast.makeText(this, "edit was clicked", Toast.LENGTH_LONG).show(); Intent intent = new Intent(this, editList.class); intent.putStringArrayListExtra("stock_list", stock_list); startActivity(intent); break; 

Здесь я пытаюсь получить список во втором действии. Здесь что-то не так?

 Intent i = new Intent(); //This should be getIntent(); stock_list = new ArrayList<String>(); stock_list = i.getStringArrayListExtra("stock_list"); 

Solutions Collecting From Web of "Передача ArrayList через намерение"

В соответствии с вашими намерениями вам необходимо:

 Intent i = getIntent(); stock_list = i.getStringArrayListExtra("stock_list"); 

То, как вы это сделали, вы только что создали новое пустое намерение без каких-либо дополнительных функций.

Если у вас есть только один дополнительный, вы можете сконденсировать это:

 stock_list = getIntent().getStringArrayListExtra("stock_list"); 

Я сделал это, передав ArrayList в форме String .

  1. Добавьте compile 'com.google.code.gson:gson:2.2.4' в блок зависимостей build.gradle .

  2. Нажмите « Синхронизировать проект» с файлами «Грейдл»

Cars.java :

 public class Cars { public String id, name; } 

FirstActivity.java

Когда вы хотите передать ArrayList :

 List<Cars> cars= new ArrayList<Cars>(); cars.add(getCarModel("1", "A")); cars.add(getCarModel("2", "B")); cars.add(getCarModel("3", "C")); cars.add(getCarModel("4", "D")); Gson gson = new Gson(); String jsonCars = gson.toJson(cars); Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("list_as_string", jsonCars); startActivity(intent); 

Получить CarsModel по функции :

 private Cars getCarModel(String id, String name){ Cars cars = new Cars(); cars.id = id; cars.name = name; return cars; } 

SecondActivity.java

Вам нужно импортировать java.lang.reflect.Type ;

На onCreate () для извлечения ArrayList :

 String carListAsString = getIntent().getStringExtra("list_as_string"); Gson gson = new Gson(); Type type = new TypeToken<List<Cars>>(){}.getType(); List<Cars> carsList = gson.fromJson(carListAsString, type); for (Cars cars : carsList){ Log.i("Car Data", cars.id+"-"+cars.name); } 

Надеюсь, это сэкономит время, я спас его.

Готово

Если вы используете Generic Array List с классом вместо определенного типа, например

EX:

 private ArrayList<Model> aListModel = new ArrayList<Model>(); 

Здесь Model = Class

Получение намерения Как:

 aListModel = (ArrayList<Model>) getIntent().getSerializableExtra(KEY); 

ДОЛЖЕН ПОМНИТЬ:

Здесь Model-class должен быть реализован так: ModelClass реализует Serializable