Как я могу получить доступ к своему настраиваемому списку после получения данных из базы данных mysql? - PullRequest
0 голосов
/ 06 мая 2020

В настоящее время я работаю над программой 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...