2016-12-17 95 views
0

我正在開發一個健康和健身應用程序,可以使用sharedprefrences存儲用戶信息。這些可以稍後由用戶查看。我可以做到這一點,並在列表視圖中顯示信息。當用戶點擊列表視圖中的項目時,它將加載顯示信息的單獨活動。我的問題是信息始終是隨機排列的,我假設因爲我正在使用sharedprefrences。我的問題是有可能對這些信息進行排序,所以它總是有相同的順序?Java:排序數據

圖片我的應用程序工作的:

enter image description here

這裏的圖像就是一個鍛鍊的用戶輸入信息,並隨後使用保存按鈕保存屏幕。

代碼:

public void saveLog (View view){ 

    EditText Date = (EditText)findViewById(R.id.editDate); 
    EditText Name = (EditText)findViewById(R.id.editName); 
    EditText Cal = (EditText)findViewById(R.id.editCal); 
    EditText STime = (EditText)findViewById(R.id.editSTime); 
    EditText ETime = (EditText)findViewById(R.id.editETime); 
    EditText Entry = (EditText)findViewById(R.id.editEntry); 

    try { 
     SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = userInfo.edit(); 
     Set<String> LogSet = new HashSet<String>(); 

     LogSet.add("Date: "+Date.getText().toString()+"\n"); 
     LogSet.add("Exercise: "+Name.getText().toString()+"\n"); 
     LogSet.add("Start Time: "+STime.getText().toString()+"\n"); 
     LogSet.add("End Time: "+ETime.getText().toString()+"\n"); 
     LogSet.add("Calories Lost: "+Cal.getText().toString()+"\n"); 
     editor.putStringSet(Entry.getText().toString(), LogSet); 
     editor.commit(); 

     // show toast message for successful save 
     Context context = getApplicationContext(); 
     CharSequence text = "User data saved!"; 
     int duration = Toast.LENGTH_LONG; 
     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 
     String Grab = userInfo.getString ("Date" , Date.getText().toString()); 


    } 
    catch(Exception ex) { 
     // insert your own error message here 
    } 


} 

下一個圖像顯示一個列表裏面的信息。

enter image description here

代碼:

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

    // Get ListView object from xml 
    listView = (ListView) findViewById(R.id.list); 
    listView.setFriction(ViewConfiguration.getScrollFriction() * 0); 
    // ListView Item Click Listener 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      int itemPosition  = position; 
      String itemValue = (String) listView.getItemAtPosition(position); 
      SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = userInfo.edit(); 
      String myString = userInfo.getAll().keySet().toString(); 
      String[] values = new String[] { myString }; 


      Intent i = new Intent(ActivityLog.this, Log_Data.class); 
      //Create the bundle 
      Bundle bundle = new Bundle(); 
      //Add your data from getFactualResults method to bundle 
      bundle.putString("TAG", itemValue); 
      //Add the bundle to the intent 
      i.putExtras(bundle); 
      startActivity(i); 
      // ListView Clicked item index 

      // ListView Clicked item value 

      // Show Alert 
      //Toast.makeText(getApplicationContext(), "Position :"+itemPosition+" ListItem : " +itemValue , Toast.LENGTH_LONG).show(); 

     } 

    }); 

} 


@Override 
protected void onStart() 
{ 
    SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = userInfo.edit(); 
    String myString = userInfo.getAll().keySet().toString(); 
    // String[] values = new String[] { myString }; 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, android.R.id.text1); 


    Map<String, ?> allEntries = userInfo.getAll(); 
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) { 


     Log.d("map values", entry.getKey() + ": " + entry.getValue().toString()); 
     adapter.add(entry.getKey()+ ": " + entry.getValue().toString()); 
     listView.setAdapter(adapter); 

    } 
    super.onStart(); 
} 


public void showLog (View view){ 

    Intent intent = new Intent(this, ActivityNewLog.class); 
    startActivity(intent); 

} 


public void deleteLog (View view){ 

    SharedPreferences settings = getSharedPreferences("userData", Context.MODE_PRIVATE); 
    settings.edit().clear().commit(); 
    getSharedPreferences("userData", 0).edit().clear().commit(); 

} 

public void dataShow (View view){ 

    Intent intent = new Intent(this, Log_Data.class); 
    startActivity(intent); 

} 

的最後形象是活動當用戶點擊列表中的一個項目。它會加載該密鑰的所有信息。

enter image description here

代碼:

public class Log_Data extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_log__data); 
    TextView data = (TextView)findViewById(R.id.textView5); 

    Bundle bundle = getIntent().getExtras(); 
    //Extract the data… 
    String something = bundle.getString("TAG"); 
    //Create the text view 
    data.setText(something); 


    } 
} 

使用束將數據傳遞到所述新活動。那麼是否有可能對這些數據進行排序,以便在最後顯示爲日期,鍛鍊名稱,開始時間,結束時間和卡路里?截至目前,數據總是隨機顯示每個新的日誌條目。

+3

使用本地數據庫(sqlite)而不是首選項。 – androidnoobdev

+0

以及我不想改變偏好的使用,我只是想知道是否有可能根據當前狀態排序信息? –

+2

一組本身是無序的。改用列表。 – wvdz

回答

0

我會推薦使用數據庫通過sqlite。