如何重新排列ListView中数据库中的数据?

时间:2019-02-21 00:09:51

标签: android listview android-arrayadapter

每个人。我有一个数据的ArrayList和一个ListView来显示数据的列表。现在,我想做的就是当我按下按钮时对数据进行重新排列并对数据中结果最高的数据进行排序。

这是我的代码:

public class MainActivity extends AppCompatActivity {

private TextView mTextMessage;

String[] dataDetail;
ArrayList<dataDetail> allDetail = new ArrayList<>();

ListView detailList;
final Context context = this;

final int min = 0;
final int max = 10;
final int random = new Random().nextInt((max - min) + 1) + min;

Button reorder = findViewById(R.id.arrangeId);

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                mTextMessage.setText(R.string.title_home);
                return true;
            case R.id.navigation_dashboard:
                mTextMessage.setText(R.string.title_dashboard);
                return true;
        }
        return false;
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    detailList = findViewById(R.id.dataView);

    mTextMessage = (TextView) findViewById(R.id.message);
    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

    new GetData().execute();

}

private class GetData extends AsyncTask<Void, Void, ArrayList<dataDetail>> {

    protected ArrayList<dataDetail> doInBackground(Void... voids) {

        HttpURLConnection urlConnection;
        InputStream in = null;
        try {
            URL url = new URL("http://10.0.2.2:8080/projectServer/DataDetailDB?getdata=true");
            urlConnection = (HttpURLConnection) url.openConnection();
            in = new BufferedInputStream(urlConnection.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        String response = convertStreamToString(in);
        System.out.println("Server response = " + response);

        try {
            JSONArray jsonArray = new JSONArray(response);
            dataDetail = new String[jsonArray.length()];

            for (int i = 0; i < jsonArray.length(); i++) {

               final String customerName = jsonArray.getJSONObject(i).get("customerName").toString();
               final String carName = jsonArray.getJSONObject(i).get("carName").toString();
               final String appointmentDate = jsonArray.getJSONObject(i).get("appointmentDate").toString();
               final String email = jsonArray.getJSONObject(i).get("email").toString();
               final String issueDescribe = jsonArray.getJSONObject(i).get("issueDescribe").toString();
               final String timeForJob = jsonArray.getJSONObject(i).get("timeForJob").toString();
               final String costForJob = jsonArray.getJSONObject(i).get("costForJob").toString();
               final String reliableOnCar = jsonArray.getJSONObject(i).get("reliableOnCar").toString();
               final String distanceJob = jsonArray.getJSONObject(i).get("distance").toString();

                dataDetail tData = new dataDetail(customerName, carName, appointmentDate, email, issueDescribe, timeForJob, costForJob, reliableOnCar, distanceJob);
                allDetail.add(tData);

                System.out.println("customername = " + customerName + "carname = " + carName + "appointmentdate = " + appointmentDate +
                    "email = " + email + "describe = " + issueDescribe + "time = " + timeForJob + "cost = " + costForJob + "reliable = " + reliableOnCar
                + "dis = " + distanceJob);

                dataDetail [i] = "Name: " + customerName + "\n" + "Appointment Date: " + appointmentDate;


                reorder.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


                        float finalResult = random * Float.parseFloat(timeForJob) + random * Float.parseFloat(reliableOnCar) +
                                random * Float.parseFloat(distanceJob) + random * Float.parseFloat(costForJob);

                        System.out.print("Test result " + finalResult + " ");

                        /* Trying to sort the data here which has the highest finalResult
                        *  will going to the top of the list */

                        allDetail = new ArrayList<String>(Arrays.asList(dataDetail));
                        Collections.sort(allDetail);

                        ArrayAdapter newList = new ArrayAdapter(context, android.R.layout.simple_list_item_1, dataDetail);
                        newList.setAdapter(theList);

                    }
                });


            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(ArrayList<dataDetail> dataDetailArrayList) {
        super.onPostExecute(dataDetailArrayList);

        ArrayAdapter theList = new ArrayAdapter(context, android.R.layout.simple_list_item_1, dataDetail);
        detailList.setAdapter(theList);
    }
}

public String convertStreamToString(InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

}

但是当我尝试使用sort时,我得到一个错误,提示它是不兼容的类型。

allDetail = new ArrayList<String>(Arrays.asList(dataDetail));
Collections.sort(allDetail);

finalResult将进行计算并为其从数据库中检索到的每个数据获取最终结果。现在,我只想自动对其重新排序,这就是logcat:

The logcat shows the data successfully retrieve and it doing the calculation as well

请任何人都可以帮助我如何重新排列列表视图?

1 个答案:

答案 0 :(得分:0)

Collections.sort()将起作用。您的问题与您如何在列表中存储数据有关