Android 列出使用 GSON 的应用

Android list app using GSON

我正在制作一个 FuelLog 应用程序来记录加油站的加油情况。我在使用 GSON 将内容作为字符串保存到列表中时遇到问题。我之所以保存一个对象,是因为每个对象(FuelLog)都有很多属性,包括:"Gas Type"、"Odometer Reading"。等。我想在列表中显示这些属性,而不是 "com.example.arshadhusain.fuelTracker.FuelLog@b1a33588" 等。很快我也想编辑这些列表项。

到目前为止,列表是这样的。

这是 FuelLog 的 class:

public class FuelLog {

   public String date;
   public String station;
   public String odometer;
   public String fuelGrade;
   public String fuelAmount;
   public String fuelUnitCost;
   public String fuelCost;

   public FuelLog (String date, String station, String odometer, String fuelGrade, String fuelAmount, String fuelUnitCost, String fuelCost) {
    this.date = date;
    this.station = station;
    this.odometer = odometer;
    this.fuelGrade = fuelGrade;
    this.fuelAmount = fuelAmount;
    this.fuelUnitCost = fuelUnitCost;
    this.fuelCost = fuelCost;

}

}

这是保存每个日志并更新列表的 class(打开提示以供用户添加属性)。

public class MainActivity extends Activity implements AdapterView.OnItemClickListener {

private Button button;
private EditText editTextMainScreen;
private ListView oldTweetsList;
private static final String FILENAME = "FuelTracker.sav";
private ArrayList<FuelLog> FuelLogs = new ArrayList<FuelLog>();
ArrayAdapter<FuelLog> adapter;

final Context context = this;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // components from main.xml
    button = (Button) findViewById(R.id.button);
    //editTextMainScreen = (EditText) findViewById(R.id.editTextResult);
    oldTweetsList = (ListView) findViewById(R.id.oldTweetsList);

    loadFromFile();
    adapter = new ArrayAdapter<FuelLog>(this,
            R.layout.list_item, FuelLogs);
    oldTweetsList.setAdapter(adapter);

    oldTweetsList.setOnItemClickListener(this);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {

            // get prompts.xml view
            LayoutInflater layoutInflater = LayoutInflater.from(context);

            View promptView = layoutInflater.inflate(R.layout.prompts, null);

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

            // set prompts.xml to be the layout file of the alertdialog builder
            alertDialogBuilder.setView(promptView);

            final EditText input = (EditText) promptView.findViewById(R.id.userInput);
            final EditText input1 = (EditText) promptView.findViewById(R.id.userInput1);
            final EditText input2 = (EditText) promptView.findViewById(R.id.userInput2);
            final EditText input3 = (EditText) promptView.findViewById(R.id.userInput3);
            final EditText input4 = (EditText) promptView.findViewById(R.id.userInput4);
            final EditText input5 = (EditText) promptView.findViewById(R.id.userInput5);
            final EditText input6 = (EditText) promptView.findViewById(R.id.userInput6);


            // setup a dialog window
            alertDialogBuilder
                    .setCancelable(false)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // get user input and set it to result
                            //editTextMainScreen.setText(input.getText());
                            setResult(RESULT_OK);
                            String station = input.getText().toString();
                            String odometer = input1.getText().toString();
                            String fuelGrade = input2.getText().toString();
                            String fuelAmount = input3.getText().toString();
                            String fuelUnitCost = input4.getText().toString();
                            String fuelCost = input5.getText().toString();
                            String date = input6.getText().toString(); //Date

                            FuelLog log = new FuelLog(date, station, odometer, fuelGrade, fuelAmount, fuelUnitCost, fuelCost);

                            FuelLogs.add(log);
                            adapter.notifyDataSetChanged();

                            saveInFile();
                            finish();
                        }
                    })
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dialog.cancel();
                                }
                            });

            // create an alert dialog
            AlertDialog alertD = alertDialogBuilder.create();

            alertD.show();

        }
    });
}

您可以通过重写 class FuelLog 的 ToString 方法来解决这个问题,如果您不这样做,列表将打印出每个 [=10] 的哈希码=] 对象已添加到您的列表中。

您可以像这样重写 FuelLog class 中的 toString() 方法:

@Override
public String toString() {
    return "date = " + date + " station = " + station; // ...etc
}

创建自定义适配器并在 getView() 方法中设置字段;