2015-06-09 124 views
1

我试图显示一个随机事实,并在事实发生变化时更改背景颜色。为什么随机数会崩溃我的Android应用程序?

我使用MainActivity上的一个随机数做它,但只要我按下按钮来生成并显示该应用程序崩溃的随机数。

这里是链接到该项目在GitHub上: https://github.com/ishay1999/FunFacts

这里是在logcat中所示的错误:

06-09 16:36:27.125 14551-14551/com.howtoevery.funfacts E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.howtoevery.funfacts, PID: 14551 
    android.content.res.Resources$NotFoundException: String resource ID #0x0 
      at android.content.res.Resources.getText(Resources.java:275) 
      at android.widget.TextView.setText(TextView.java:4261) 
      at com.howtoevery.funfacts.MainActivity$1.onClick(MainActivity.java:56) 
      at android.view.View.performClick(View.java:4763) 
      at android.view.View$PerformClick.run(View.java:19821) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5274) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 

这里是MainActivity.java代码:

package com.howtoevery.funfacts; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import java.util.Random; 


public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // Creating the random 
     final Random rand = new Random(); 


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

     final TextView factLabel; 
     final Button showFactButton; 

     factLabel = (TextView) findViewById(R.id.fact); 
     final ViewGroup backGround = (RelativeLayout) findViewById(R.id.mainBackground); 
     showFactButton = (Button) findViewById(R.id.factButton); 

     View.OnClickListener myListener = new View.OnClickListener() { 

      int randomNumber; 

      @Override 
      public void onClick(View view) { 
       randomNumber = rand.nextInt(1); // randomNumber will be 0 or 1 

       switch (randomNumber) { 
        case 0: { // in case it is 0, show fact number 1 with green color 
         factLabel.setText(R.string.fact1); 
         backGround.setBackgroundColor(getResources().getColor(R.color.android_green)); 
         showFactButton.setTextColor(getResources().getColor(R.color.android_green)); 
        } break; 

        case 1: { // in case it is 1, show fact number 2 with orange color 
         factLabel.setText(R.string.fact2); 
         backGround.setBackgroundColor(getResources().getColor(R.color.orangish)); 
         showFactButton.setTextColor(getResources().getColor(R.color.orangish)); 
        } break; 
       } 

       factLabel.setText(randomNumber); // show the number generated with randomNumber, ONLY FOR DEBUG PURPOSES 

      } 
     }; 

     showFactButton.setOnClickListener(myListener); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

我对应用程序的期望是,它会显示不同的事实并更改颜色(现在,为了调试,我希望看到文本更改s到生成的随机数并且颜色已经改变)

为什么它不能像我期望的那样工作?

+4

根据该错误,您引用的是不存在的资源,并且它与随机数无关。 – llogiq

+0

@llogiq,什么是不存在的资源? 'randomNumber'变量** do **存在。 –

+0

@IshayFrenkel:*资源*,不可变。 –

回答

3

问题在这里是这条线:factLabel.setText(randomNumber);。你想设置代表你的randmNumber的字符串。使用

factLabel.setText(String.valueOf(randomNumber)); 

setText版本使用的是查找与ID的字符串的诠释您提供的。如果找不到,则会引发该异常

+0

谢谢!我不知道我需要将'randomNumber'作为一个字符串。 (我会尽快将其标记为答案) 有人可以告诉我我做错了什么,我得到了4个关于这个问题的提示吗? –

+0

我不知道。抱歉 – Blackbelt

0

检查您想要使用的所有资源R.color.<something>R.string.<something>。根据你的例外行的数量(MainActivity.java:56我认为),你可以找到你的应用程序中没有确定哪个资源,并转到某个文件(colors.xml,strings.xml等)并添加它

+0

这与问题无关..'MainActivity'中的第56行是'factLabel.setText(randomNumber);'并且没有资源有问题或缺失,但是谢谢你试图帮助我:) –

相关问题