В настоящее время я работаю над программой Android, которая может сохранять и извлекать данные из локальной базы данных MYSQL с помощью сервера WAMP. Сейчас я занимаюсь извлечением данных из базы данных путем обработки кодов синтаксического анализа JSON и доступа к серверу с помощью AsyncTask. Я также создал собственный список ArrayList, в котором могу хранить полученные данные. Прямо сейчас у меня возникли проблемы с получением списка, сохраненного в классе AsyncTask. Я глобализировал ArrayList и использовал одноэлементный шаблон, чтобы всегда получать один и тот же список в памяти (чтобы я не создавал новый экземпляр, когда пытаюсь получить данные из списка). Но, в конце концов, он все еще дает мне пустой список или, другими словами, он все еще создает новый экземпляр. Надеюсь, вы, ребята, сможете проверить и исправить мой код.
//MAIN CLASS TO VIEW TRIPS
public class ViewTrip extends AppCompatActivity {
private final String dburl = "http://192.168.254.104/animotripdb/";
ArrayList<String> tripList = new ArrayList<>();
ListView viewTripsLV;
ArrayAdapter<String> adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_trip);
getSupportActionBar().hide();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
viewTripsLV = (ListView) findViewById(R.id.tripsListView);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tripList);
viewTripsLV.setAdapter(adapter);
setTripList();
}
private void setTripList(){
getAllTripsDAT gDAT = new getAllTripsDAT();
gDAT.execute();
Log.e("ViewTrip", "mTripList size: " + MyTrips.getInstance().getList().size());
for(int i=0; i<MyTrips.getInstance().getList().size(); i++){
String line = "From ViewTrip: " + Integer.toString(MyTrips.getInstance().getList().get(i).getmId()) + " " + MyTrips.getInstance().getList().get(i).getmDriver();
tripList.add(line);
Log.e("ViewTrip", line);
}
adapter.notifyDataSetChanged();
}
private class getAllTripsDAT extends AsyncTask<String, String, String> {
String TAG = "ViewTrip";
@Override
protected String doInBackground(String... strings) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(dburl + "get.php"));
HttpResponse response = client.execute(request);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = "";
while ((line = reader.readLine()) != null) {
stringBuffer.append(line);
break;
}
reader.close();
String result = stringBuffer.toString();
return result;
} catch (Exception e) {
Log.e(TAG, "doInBackground error: " + e.getMessage());
return e.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
try {
JSONObject jsonResult = new JSONObject(result);
int success = jsonResult.getInt("success");
if (success == 1) {
JSONArray trips = jsonResult.getJSONArray("trips");
for (int i = 0; i < trips.length(); i++) {
JSONObject trip = trips.getJSONObject(i);
int id = trip.getInt("ID");
String driver = trip.getString("driver");
String platenumber = trip.getString("platenumber");
String from = trip.getString("currentLocation");
String to = trip.getString("destination");
String time = trip.getString("time");
String date = trip.getString("date");
int nop = trip.getInt("passengers");
//This is where I add the retrieved data
MyTrips.getInstance().getList().add(new TripList(id, driver, platenumber, from, to, time, date, nop));
//This is the first LOG.e output, size = 1 ^^^
Log.e(TAG, Integer.toString(MyTrips.getInstance().getList().size()));
}
} else {
Log.e("Database Class", "Failed JSON parsing");
}
} catch (JSONException e) {
e.printStackTrace();
Log.e(TAG, "View trip error: " + e.getMessage());
}
}
}
}
//SINGLETON CLASS
public class MyTrips {
private static MyTrips mTrips;
private ArrayList<TripList> tripList = null;
public static MyTrips getInstance(){
if(mTrips == null){
mTrips = new MyTrips();
}
return mTrips;
}
private MyTrips(){
tripList = new ArrayList<TripList>();
}
public ArrayList<TripList> getList(){
return this.tripList;
}
public void add(int id, String driver, String platenumber, String from, String to, String time, String date, int nop){
tripList.add(new TripList(id, driver, platenumber, from, to, time, date, nop));
}
}
//CUSTOM ARRAYLIST CLASS
public class TripList {
private int mId, mNOP;
private String mDriver, mPlatenumber, mFrom, mTo, mTime, mDate;
public TripList(int id, String driver, String platenumber, String from, String to, String time, String date, int nop){
mId = id;
mDriver = driver;
mPlatenumber = platenumber;
mFrom = from;
mTo = to;
mTime = time;
mDate = date;
mNOP = nop;
}
public int getmId() {
return mId;
}
public void setmId(int mId) {
this.mId = mId;
}
public int getmNOP() {
return mNOP;
}
public void setmNOP(int mNOP) {
this.mNOP = mNOP;
}
public String getmDriver() {
return mDriver;
}
public void setmDriver(String mDriver) {
this.mDriver = mDriver;
}
public String getmPlatenumber() {
return mPlatenumber;
}
public void setmPlatenumber(String mPlatenumber) {
this.mPlatenumber = mPlatenumber;
}
public String getmFrom() {
return mFrom;
}
public void setmFrom(String mFrom) {
this.mFrom = mFrom;
}
public String getmTo() {
return mTo;
}
public void setmTo(String mTo) {
this.mTo = mTo;
}
public String getmTime() {
return mTime;
}
public void setmTime(String mTime) {
this.mTime = mTime;
}
public String getmDate() {
return mDate;
}
public void setmDate(String mDate) {
this.mDate = mDate;
}
}
ВЫВОД ИЗ LOGCAT
Вывод ViewTrip: 1 из Класс AsyncTask getAllTripsDAT в ViewTrips
Размер mTripList: 0 взят из метода setTripsList () в ViewTrips