项目停止工作 - 找不到逻辑错误

时间:2013-09-08 21:23:20

标签: android

我正在玩Android(对它非常不熟悉),我无法理解这里出了什么问题 -

课堂上的数据声明 -

//data
    DateFormat dateFormat   = null;
    Date date               = null;
    String _date            = null;
    Random random;

函数onCreate中的代码 -

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //get date and format it, then save it to a string
    dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
    date = new Date();

    //set the textview object as string object in R file
    TextView text = (TextView) findViewById(R.string.quote);

    //if the date has changed, change the quote randomly
    random = new Random();

    //
    text.setText(_date.equals(dateFormat.format(date))?(CharSequence)quotes[(random.nextInt(quotes.length)+1)]:(CharSequence)findViewById(R.string.quote));

    //set date as new date
    _date = dateFormat.format(date);

我知道这是一个非常漫长而烦人的三元操作,我觉得这可能是为什么当我尝试在模拟器中打开应用程序时它会停止工作。

_date.equals(dateFormat.format(date)) ? (CharSequence) quotes[(random.nextInt(quotes.length) + 1)] :(CharSequence) findViewById(R.string.quote)

关于出了什么问题的任何想法?

2 个答案:

答案 0 :(得分:2)

您尚未初始化_date

只需交换最后两行代码。

修改

我刚刚抓住了代码的逻辑。抱歉,问题是第一次启动应用时会调用onCreate。您必须将日期保留在共享首选项存储中,以便记住其值从一次到另一次:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//get date and format it, then save it to a string
dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
date = dateformat.format(new Date());

//set the textview object as string object in R file
TextView text = (TextView) findViewById(R.id.quote);

//if the date has changed, change the quote randomly
random = new Random();

SharedPreferences prefs = this.getSharedPreferences(
  "com.example.app", Context.MODE_PRIVATE);
String lastdatekey = "com.example.app.lastdate";
String _date = prefs.getString(lastdatekey, "");
String lastquotekey = "com.example.app.lastquote";
String lastquote = prefs.getString(lastquotekey, "");

if (!_date.equals(date)) {
    String quote = quotes[(random.nextInt(quotes.length)+1)];
    text.setText(quote);
    //set date as new date
    prefs.edit().putString(lastdaykey, date).putString(lastquotekey, quote).commit();
}
else {
    text.setText(lastquote);
}

我想这会做到的!注意如何使用私有存储器将信息从一个执行存储和检索到下一个执行。

答案 1 :(得分:0)

这似乎是问题

TextView text = (TextView) findViewById(R.string.quote);

您正在尝试初始化textview,因此它应该是

TextView text = (TextView) findViewById(R.id.quote);

其中R.id.quote是xml

中textview的id