Так что в основном у меня возникла эта проблема в этот последний час или около того, и раньше ее не было.
В моей основной деятельности у меня есть собственный RecyclerView и imageView с перезагрузкой pi c в нем, чтобы перезагрузить данные.
Вот переменные, вовлеченные в это на моей MainActivity:
public class MainActivity extends AppCompatActivity {
private ArrayList<Integer> listFavorites;
private ArrayList<StationVelo> listStations;
private RecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listFavorites = new ArrayList<>();
listStations = new ArrayList<>();
initRecyclerView();
chargeStations();
ImageView ivRefresh = findViewById(R.id.ivRefresh);
ivRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chargeStations();
}
});
}
}
Вот как выглядит InitRecyclerview ():
public void initRecyclerView(){
RecyclerView recyclerView = findViewById(R.id.listView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
DividerItemDecoration mDividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
linearLayoutManager.getOrientation());
recyclerView.addItemDecoration(mDividerItemDecoration);
adapter = new RecyclerViewAdapter(this, listStations);
recyclerView.setAdapter(adapter);
}
Вот то, как наделен chargeStations ():
public void chargeStations(){
listStations.clear();
chargeListFavorites();
new AsyncTaskJcdecaux().execute(listStations, adapter, listFavorites);
}
Вот как выглядит chargeListFoving ():
private void chargeListFavorites() {
listFavorites.clear();
File directory = this.getFilesDir();
File file = new File(directory, "favorite_stations");
if(file.exists()){
FileInputStream fis;
ObjectInputStream in = null;
try {
fis = openFileInput("favorite_stations");
in = new ObjectInputStream(fis);
listFavorites = (ArrayList<Integer>) in.readObject();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Вот как выглядит мой AsyncTaskJCDecaux:
public class AsyncTaskJcdecaux extends AsyncTask<Object, Void, String> {
private ArrayList<StationVelo> listStations;
private RecyclerViewAdapter adapter;
private ArrayList<Integer> listFavorites;
@Override
protected String doInBackground(Object... params) {
listStations = (ArrayList<StationVelo>) params[0];
adapter = (RecyclerViewAdapter) params[1];
listFavorites = (ArrayList<Integer>) params[2];
System.out.println("size =" + listFavorites.size());
HttpsURLConnection urlConnection = null;
String stringJson = "";
StringBuilder strBuilder = new StringBuilder();
try {
//Connexion to JCDecaux's API
URL url = new URL("url to my api that i didn't put on here but it has no issues");
urlConnection = (HttpsURLConnection) url.openConnection();
System.out.println("first call of size size = " + listFavorites.size());
//Charging the url to the API and building a string with the JSON data
if (urlConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) {
System.out.println("second call of size =" + listFavorites.size());
InputStreamReader isr = new InputStreamReader(urlConnection.getInputStream());
BufferedReader input = new BufferedReader(isr);
String jsonStr = input.readLine();
strBuilder.append(jsonStr);
//Adding a line to the string builder
while(jsonStr!=null && !jsonStr.equals("")){
jsonStr = input.readLine();
strBuilder.append(jsonStr);
}
input.close();
}
}catch(MalformedURLException e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
} finally {
System.out.println("third call of size =" + listFavorites.size());
urlConnection.disconnect();
System.out.println("size =" + listFavorites.size());
}
stringJson = strBuilder.toString();
System.out.println("fourth call of size =" + listFavorites.size());
//charging all the stations
if(!stringJson.equals("")){
try {
JSONArray jArray = new JSONArray(stringJson);
int length = jArray.length();
for(int i=0; i<length; i++){
String nameStation = jArray.getJSONObject(i).getString("name").toLowerCase();
String[] strArray = nameStation.split(" ");
StringBuilder builder = new StringBuilder();
for (String s : strArray) {
if(s.length()>0) {
String cap = s.substring(0, 1).toUpperCase() + s.substring(1);
builder.append(cap + " ");
}
}
nameStation = builder.toString();
String addressStation = jArray.getJSONObject(i).getString("address").toLowerCase();
String[] strArray2 = addressStation.split(" ");
builder = new StringBuilder();
for (String s : strArray2) {
if(s.length()>0) {
String cap = s.substring(0, 1).toUpperCase() + s.substring(1);
builder.append(cap + " ");
}
}
addressStation = builder.toString();
if(listFavorites.contains(jArray.getJSONObject(i).getInt("number"))){
StationVelo stVelo = new StationVelo(jArray.getJSONObject(i).getInt("number"),
nameStation
,addressStation
,Double.valueOf(jArray.getJSONObject(i).getJSONObject("position").getString("lat"))
,Double.valueOf(jArray.getJSONObject(i).getJSONObject("position").getString("lng"))
,jArray.getJSONObject(i).getString("status").equals("OPEN")
,jArray.getJSONObject(i).getBoolean("banking")
,Integer.valueOf(jArray.getJSONObject(i).getString("bike_stands"))
,Integer.valueOf(jArray.getJSONObject(i).getString("available_bike_stands"))
,Integer.valueOf(jArray.getJSONObject(i).getString("available_bikes")),
true);
listStations.add(stVelo);
}else {
StationVelo stVelo = new StationVelo(jArray.getJSONObject(i).getInt("number"),
nameStation
,addressStation
,Double.valueOf(jArray.getJSONObject(i).getJSONObject("position").getString("lat"))
,Double.valueOf(jArray.getJSONObject(i).getJSONObject("position").getString("lng"))
,jArray.getJSONObject(i).getString("status").equals("OPEN")
,jArray.getJSONObject(i).getBoolean("banking")
,Integer.valueOf(jArray.getJSONObject(i).getString("bike_stands"))
,Integer.valueOf(jArray.getJSONObject(i).getString("available_bike_stands"))
,Integer.valueOf(jArray.getJSONObject(i).getString("available_bikes")),
false);
listStations.add(stVelo);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return "true";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
adapter.notifyDataSetChanged();
}
}
И, как вы можете видеть, я печатаю в четыре раза больше, чем ListFavor. Вот что происходит при первом вызове функции chargeStations.
И вот что происходит, когда я перезагружаю данные, и что теперь отображают вызовы.
Я буквально хочу покончить с собой, поскольку этого не должно происходить, и я не могу найти никакого объяснения этой ошибке, ошибке или какому-то другому адскому чудовищу. Я скопировал и вставил только те части, которые не работают. Никаких проблем не происходит из-за моего класса Station, но если вы хотите увидеть его или мой RecyclerAdapter, я бы с удовольствием опубликовал их.