Причина, по которой отправляется только одна, заключается в том, что вы отправляете вне цикла while, который проходит через Курсор, поэтому отправляется только последняя.
То есть у вас: -
while (cursor.moveToNext()) {
ADDRESS = cursor.getString(cursor.getColumnIndex(DatabaseHelper.SETTING_ADDRESS));
PORT = cursor.getString(cursor.getColumnIndex(DatabaseHelper.SETTING_PORT));
TIMEINTERVAL=cursor.getString(cursor.getColumnIndex(DatabaseHelper.SETTING_TIME_INTERVAL));
}
Допустим, запрос извлек курсор с 10 строками в качестве адреса 1,2,3 .... 10 (для пояснения), затем
Введен цикл: АДРЕС установлен в 1, следующийитерация устанавливает его на 2, затем на 3 ..... и, наконец, ADDRESS устанавливается на 10 (то же самое для PORT и TIMEINTERVAL)
После цикла данные отправляются, поэтому отправляется только один (ADDRESS 10).
То, что вам нужно, это: -
List<MapDetails> data = new ArrayList<>();
MapDetails mapDetails
Retrofit.Builder builder;
Retrofit retrofit;
Call<MapDetails> call;
Api locate;
while (cursor.moveToNext()) {
ADDRESS = cursor.getString(cursor.getColumnIndex(DatabaseHelper.SETTING_ADDRESS));
PORT = cursor.getString(cursor.getColumnIndex(DatabaseHelper.SETTING_PORT));
TIMEINTERVAL=cursor.getString(cursor.getColumnIndex(DatabaseHelper.SETTING_TIME_INTERVAL));
portInts=Integer.parseInt(PORT);
mapDetails = new MapDetails(gg, lat, lon, well, "0", portInts);
data.clear(); //<<<<<<<< remove previous entries if required????
data.add(mapDetails);
builder = new Retrofit.Builder()
.baseUrl("http://" + ADDRESS + ":" + PORT)
.addConverterFactory(GsonConverterFactory.create());
retrofit = builder.build();
locate = retrofit.create(Api.class);
call = locate.mapDetailLocation(data);
call.enqueue(new Callback<MapDetails>() {
@Override
public void onResponse(Call<MapDetails> call, Response<MapDetails> response) {
Snackbar.make(view, "" + response,
Snackbar.LENGTH_INDEFINITE).setAction("Action", null).show();
}
@Override
public void onFailure(Call call, Throwable t) {
Snackbar.make(view, "" + t.getMessage(),
Snackbar.LENGTH_INDEFINITE).setAction("Action", null).show();
}
}
- Примечание выше - это принципиальный код.он не был проверен или протестирован и поэтому может содержать некоторые ошибки.
- Возможно, вы можете отправить весь набор, например data , с заполнением, в этом случае вам может понадобиться толькодо
data.add(mapDetails);
в цикле и затем иметь следующий код вне цикла.