2016-11-21 5 views
0

In meinem Code unten verwende ich eine ListView und einen Custom Array-Adapter, um eine Liste zu erstellen, die Besprechungen speichert (Beteiligte Personen, Beschreibung, Datum und Uhrzeit). Ich habe auf den Stack-Überlauf geschaut und bin auf gemeinsame Vorlieben gestoßen. Ich weiß allerdings nicht, wie ich es benutzen soll. Jede Hilfe wird sehr geschätzt.Ich möchte meine Daten mit gemeinsamen Einstellungen speichern, wenn möglich

public class MainActivity extends AppCompatActivity { 
ArrayList<SearchResults> searchResults; 
private FloatingActionButton add; 
private FloatingActionButton clear; 
ArrayList<SearchResults> results = new ArrayList<SearchResults>(); 
final Context context = this; 
String time1, people1, description1, mDate, hour, minute, MeridiemIndicator, dateNumber; 
int Year, Month, Day, Hour, Minute; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    searchResults = new ArrayList<SearchResults>(); 
    setContentView(R.layout.activity_main); 
    final ListView lv1 = (ListView) findViewById(R.id.ListView); 
    final CustomAdapter myAdapter = new CustomAdapter(context, R.layout.custom_row_view, results); 
    lv1.setAdapter(myAdapter); 


    add = (FloatingActionButton) findViewById(R.id.add); 
    add.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(final View view) { 

      dialogMethod(lv1); 
     } 


    }); 

    lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      CustomAdapter adapter = (CustomAdapter) parent.getAdapter(); 
      adapter.remove(results.get(position)); 
      adapter.notifyDataSetChanged(); 


     } 
    }); 
    lv1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long l) { 
      CustomAdapter adapter = (CustomAdapter) parent.getAdapter(); 
      adapter.remove(results.get(position)); 
      adapter.notifyDataSetChanged(); 
      dialogMethod(lv1); 

      return true; 
     } 


    }); 
    clear = (FloatingActionButton) findViewById(R.id.clear); 
    clear.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(final View view) { 
      results.clear(); 
      CustomAdapter myAdapter = new CustomAdapter(context, R.layout.custom_row_view, results); 
      lv1.setAdapter(myAdapter); 
      myAdapter.notifyDataSetChanged(); 
     } 


    }); 
} 




public void dialogMethod(final ListView lv1) { 
    final Dialog dialog = new Dialog(context); 
    dialog.setContentView(R.layout.activity_add_meeting); 
    dialog.setTitle("Meeting"); 

    //ingredient.getText().toString(); 

    final EditText people = (EditText) dialog.findViewById(R.id.people); 
    if (people.getText().toString().length() == 0) 
     people.setError("Required"); 
    final EditText description = (EditText) dialog.findViewById(R.id.description); 
    if (description.getText().toString().length() == 0) 
     description.setError("Required"); 
    FloatingActionButton save = (FloatingActionButton) dialog.findViewById(R.id.save); 
    // if button is clicked, close the custom ingredient_dialog 
    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatePicker cal = (DatePicker) dialog.findViewById(R.id.calendar); 
      Year = cal.getYear(); 
      Month = cal.getMonth(); 
      Day = cal.getDayOfMonth(); 
      Month = Month + 1; 

      TimePicker time = (TimePicker) dialog.findViewById(R.id.clock); 
      Hour = time.getHour(); 
      Minute = time.getMinute(); 

      dialog.dismiss(); 
      time1 = hour + ":" + minute + MeridiemIndicator; 
      people1 = people.getText().toString(); 
      description1 = description.getText().toString(); 

      mDate = Year + "/" + Month + "/" + Day; 
      dateNumber = Year + ""; 
      if (Month < 10) { 
       dateNumber += "0" + Month; 
      } else { 
       dateNumber += Month; 
      } 
      if (Day < 10) { 
       dateNumber += "0" + Day; 
      } else { 
       dateNumber += Day; 
      } 


      ArrayList<SearchResults> searchResults = GetSearchResults(); 
      lv1.setAdapter(new CustomAdapter(MainActivity.this, R.layout.custom_row_view, searchResults)); 


     } 
    }); 
    dialog.show(); 


} 
private ArrayList<SearchResults> GetSearchResults() { 


    SearchResults sr1 = new SearchResults(); 
    sr1.setName(" Meeting With: " + people1); 
    sr1.setTimeOfMeeting(" Starts At: " + time1); 
    sr1.setDescription(" Details: " + description1); 
    sr1.setDate(" Date: " + mDate); 
    sr1.setDateNumber(dateNumber); 
    results.add(sr1); 
    Collections.sort(results, new Comparator<SearchResults>() { 
     public int compare(SearchResults x, SearchResults y) { 
      return Integer.parseInt(x.getDateNumber()) - Integer.parseInt(y.getDateNumber()); 
     } 
    }); 


    return results; 
    } 
} 

Auch hier ist meine Gewohnheit Adapter Code

public class CustomAdapter extends ArrayAdapter { 
private static ArrayList<SearchResults> searchArrayList; 
private LayoutInflater mInflater; 


public CustomAdapter(Context context, int custom_row_view, ArrayList<SearchResults> results) { 
    super(context,custom_row_view,results); 

    searchArrayList = results; 
    mInflater = LayoutInflater.from(context); 

} 

public int getCount() { 
    return searchArrayList.size(); 
} 

public Object getItem(int position) { 
    return searchArrayList.get(position); 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.custom_row_view, null); 
     holder = new ViewHolder(); 
     holder.txtName = (TextView) convertView.findViewById(R.id.name); 
     holder.txtTimeOfMeeting = (TextView) convertView.findViewById(R.id.timeOfMeeting); 
     holder.txtDescription = (TextView) convertView.findViewById(R.id.description); 
     holder.txtDate = (TextView) convertView.findViewById(R.id.date); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtName.setText(searchArrayList.get(position).getName()); 
    holder.txtTimeOfMeeting.setText(searchArrayList.get(position).getTimeOfMeeting()); 
    holder.txtDescription.setText(searchArrayList.get(position).getDescription()); 
    holder.txtDate.setText(searchArrayList.get(position).getDate()); 

    return convertView; 
} 

static class ViewHolder { 
    TextView txtName; 
    TextView txtTimeOfMeeting; 
    TextView txtDescription; 
    TextView txtDate; 
    } 
} 
+0

Duplizieren von [how-to-save-Daten-using-shared-preferences] (http://stackoverflow.com/questions/6015197/how-to-save-data-using-shared-preferences) –

+0

Sie besser sollte eine Datenbank verwenden, da Sie eine Liste speichern müssen, werden die gemeinsamen Einstellungen für einen oder zwei Einträge verwendet. – Chol

Antwort

0

Sie können JsonObject machen (oder JsonArray) und als String speichern (jsonObject.toString() oder jsonArray.toString())

JsonObject & & Array tutorial ->https://www.tutorialspoint.com/json/json_java_example.htm

Und dann erhalten oder speichern Sie Ihre String

public String getMeetings(){ 
     // ctx is Contex e.g> getApplicationContext() 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); 
     return sharedPreferences.getString("key_name", "[]"); // return from shared preferences, if there is nothing for key_name the return will be empty array 
    } 

    public void setMeetings(String your_list_asJsonString){ 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString("key_name", your_list_asJsonString); // Here you save your string in shared preferences, and than you can access it with key_name 
     editor.commit(); // or editor.apply() 
    } 

Es gibt viele Möglichkeiten,

0

Es gibt eine Menge Möglichkeiten, Daten über Ihre App in Android zu speichern:

  • SharedPreferences
  • Gerätespeicher/SD-Kartenspeicher
  • SQLite

Je nach Art der Daten sollte das Speichermedium für die Daten gewählt werden.

  • Eine Bilddatei sollte als JPEG/PNG-Datei auf dem Gerät Lagerung und zugänglich von außerhalb der App gespeichert werden, wenn es sein muss. Es macht keinen Sinn, ein Bild, das in SharedePreferences/SQLite als Byte-Stream codiert ist, zu speichern.

  • Einige Daten in einem festen Format (wie Ihres), das in einer Liste usw. angezeigt werden soll, sollten in SQL gespeichert werden, da es eine sehr geordnete Möglichkeit zum Speichern von Daten bietet.

  • Verschiedene Daten wie Benutzerkonto-Informationen, die nicht wiederholbar sind und von unstrukturierter Form sind, sollten in den SharedPreferences des Geräts gespeichert werden (ich speichere mindestens solche Daten wie Kontoinformationen usw. in SharedPreferences).

So viel für den theoretischen Teil. Da Sie eine Liste haben, ist das Format der Daten, die in jedem Listenelement angezeigt werden, relativ strukturiert und muss häufig aufgerufen werden. In diesem Fall würde ich vorschlagen, dass eine Datenbank zum Speichern Ihrer Daten besser als CRUD verwendet wird Operationen in SQLite sind ziemlich einfach zu erreichen. Um mehr über SQLite zu erfahren, gehen Sie durch die documentation für SQLite auf der Android Developers Website.

Verwandte Themen