2016-01-30 2 views
-1

Я делаю приложение FuelLog, сохраняя журнал заполнения топливом на бензоколонках. У меня возникают проблемы с помощью GSON, чтобы сохранить вещи в списке как строки. Причина, по которой я спасаю объект, состоит в том, что каждый объект (FuelLog) имеет много атрибутов, включая: «Тип газа», «Чтение одометра». и т. д. Я бы хотел показать эти атрибуты в списке, а не, например, «[email protected]». Вскоре я также хотел бы отредактировать эти элементы списка.Приложение для Android-приложений с использованием GSON

Вот как выглядит список до сих пор. List

Вот класс для FuelLog:

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; 

} 

}

Вот класс, который сохраняет каждый журнал и обновляет список (подсказка открытой для пользователя, чтобы добавить атрибуты).

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(); 

     } 
    }); 
} 
+0

Создайте пользовательский адаптер. – Rohit5k2

+0

Вам необходимо реализовать метод toString для вашего объекта, иначе он отобразит адрес памяти. (Бла @ 8161846) –

ответ

0

Вы можете просто переопределить метод ToString() в классе FuelLog так:

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

или

Создание пользовательского адаптера и в GetView() метод установить вам полей;

0

Вы можете избавиться от этой проблемы, просто переопределение метода ToString класса FuelLog, если вы не сделаете, то список распечатки хэш каждого объекта FuelLog добавлен в список.

Смежные вопросы