2017-08-24 55 views
0

我想要完成的是取一個數組,將它排序,拉出前5個結果並將它們顯示在一個小窗口中。建議我嘗試使用前面提到的方法來完成此操作,如下面的代碼所示。我對Android還是比較陌生,這是我第一次嘗試使用StringBuffer和AlertDialog。Android:傳遞數組到StringBuffer到AlertDialog

我的錯誤是我做了一些錯誤的初始化lastScoreMessage變量或我正確地傳遞它。我所知道的是,即使我在我的onClick開關案例中專門調用了它,它給了我一個錯誤,說它從來沒有使用過(在lastFive方法中),並且無法在onClick switch語句中解析符號lastScoreMessage,我試圖用它。

這裏的任何幫助,非常感謝。

public class EditTextButtons extends AppCompatActivity implements View.OnClickListener { 

    DBHandler db; 

    Calendar c = Calendar.getInstance (); 
    Date d = c.getTime (); 

    EditText etName; 
    Button btnAdd; 
    Button btnLastFive; 

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

     db = new DBHandler (this); 

     etName = (EditText) findViewById (R.id.etName); 
     btnAdd = (Button) findViewById (R.id.btnAdd); 
     btnLastFive = (Button) findViewById (R.id.btnLastFive); 

     // set listeners 
     btnAdd.setOnClickListener (this); 
     btnLastFive.setOnClickListener (this); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId ()) { 
      case R.id.btnAdd: 
       insertIntoDB (); 
       Intent i = new Intent (getApplicationContext (), Snake.class); 
       startActivity (i); 
       break; 
      case R.id.btnLastFive: 
       lastFive(); 
       showMessage ("Last 5 Scores", lastScoreMessage); 
       break; 
      default: 
       break; 
     } 
    } 


    protected void insertIntoDB() { 
     ContentValues cv = new ContentValues (); 
     cv.put (db.USERNAME, etName.getText ().toString ()); 
    } 

    protected void lastFive() { 
     int listsize = 5; 
     List<User> userlist = new ArrayList<User> (); 
     userlist = db.convertDatabaseToList (); 
     Collections.sort (userlist, User.Comparators._id); 

     StringBuffer buffer = new StringBuffer(); 
     String lastScoreMessage; 

     for (int i = 0; i < listsize; i++) { 
      User temp = userlist.get(i); 

      String username = temp.getName(); 
      int score = temp.getScore(); 

      buffer.append(username + ": " + score + "\n"); 
     } 

     lastScoreMessage = buffer.toString(); 
    } 


    protected void showMessage(String title, String message) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setCancelable(true); 
     builder.setTitle(title); 
     builder.setMessage(message); 
     builder.show(); 
    } 
} 
+1

看起來'lastScoreMessage'不是'onClick'可以訪問的方法的變量。您需要將其聲明爲一個類變量,它只能在方法lastFive中訪問,並在此之後不做任何事情。 @Pavneet_Singh擊敗了我。 :-) – escapesequence

回答

1

只需在類中而不是方法中創建lastScoreMessage。問題是變量的範圍只是最高的方法。首先在類中創建變量。然後像你一樣用方法存儲價值。

+0

我現在感覺很傻,很明顯!非常感謝! –

0

你可以聲明lastScoreMessage爲類變量的的影響它在lastFive()方法或修改lastFive()方法返回您傳遞給showMessage()方法

String message = lastFive(); 
showMessage ("Last 5 Scores", message); 

串並設置lastFive()方法像這樣

protected String lastFive() { 
    int listsize = 5; 
    List<User> userlist = new ArrayList<User> (); 
    userlist = db.convertDatabaseToList (); 
    Collections.sort (userlist, User.Comparators._id); 

    StringBuffer buffer = new StringBuffer(); 
    String lastScoreMessage; 

    for (int i = 0; i < listsize; i++) { 
     User temp = userlist.get(i); 

     String username = temp.getName(); 
     int score = temp.getScore(); 

     buffer.append(username + ": " + score + "\n"); 
    } 

    lastScoreMessage = buffer.toString(); 

    return lastScoreMessage 
}