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() 方法中设置字段;
我正在制作一个 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() 方法中设置字段;