Я довольно новичок в android и java, я вытаскиваю некоторые данные из интернета, нажимая на элемент в виде списка, но мне нужно 2 звонка, чтобы получить нужную мне информацию. Когда я получаю значение int из первого вызова, я передаю его второму методу, который выполняет свой собственный вызов, получает значение и помещает его в SharedPref. Когда я пытаюсь получить данные обратно в первом методе, сначала он возвращает значение по умолчанию «», но когда я нажимаю на второй элемент, он показывает результат, который должен был быть вызван в первый раз, при третьем щелчке он показывает второй результат и т.д ...
Я пытался с базами данных, и теперь я пытаюсь с SharedPref, всегда тот же результат. Пытался поместить вызов метода в поток, все тот же ...
Это мой первый метод, который вызывает второй, называемый тратой категории
private void listViewFunction() {
lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int userId = arrayList.get(position).idUser;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
TrikoderAPI trikoderAPI = retrofit.create(TrikoderAPI.class);
Call<SingleFeed> call = trikoderAPI.getSingleFeed(userId);
call.enqueue(new Callback<SingleFeed>() {
@Override
public void onResponse(Call<SingleFeed> call, Response<SingleFeed> response) {
SingleFeed data = response.body();
final int categoryId = data.getData().getRelationships().getSpendingCategory().getData().getId();
spendingCategory(categoryId);
String info;
info = sp.getString(CATEGORY_NAME, "");
String result = getString(R.string.type) + data.getData().getType() + "\n"
+ getString(R.string.id) + data.getData().getId() + "\n"
+ getString(R.string.amount) + data.getData().getAttributes().getAmount() + "\n"
+ getString(R.string.remark) + data.getData().getAttributes().getRemark() + "\n"
+ getString(R.string.name) + data.getData().getAttributes().getName() + "\n"
+ getString(R.string.date) + data.getData().getAttributes().getDate() + "\n"
+ getString(R.string.category) + info;
popUpWindow(result);
editor.clear();
editor.commit();
}
@Override
public void onFailure(Call<SingleFeed> call, Throwable t) {
Toast.makeText(MainActivity.this, getString(R.string.somethingWrong) + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
});
}
И это второй метод
private void spendingCategory(int categoryId) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
TrikoderAPI trikoderAPI = retrofit.create(TrikoderAPI.class);
Call<SingleCategory> call = trikoderAPI.getCategoryFeed(categoryId);
call.enqueue(new Callback<SingleCategory>() {
@Override
public void onResponse(Call<SingleCategory> call, Response<SingleCategory> response) {
SingleCategory data = response.body();
String result = data.getData().getAttributes().getName();
Log.d(TAG, "onResponse: " + result);
sp.edit().putString(CATEGORY_NAME, result).apply();
@Override
public void onFailure(Call<SingleCategory> call, Throwable t) {
Toast.makeText(MainActivity.this, getString(R.string.somethingWrong), Toast.LENGTH_SHORT).show();
}
});
}
Я ожидаю, что первым выводом будет значение строки результата, а не значение по умолчанию, полученное из SharedPref