SnoX
SnoX

Reputation: 303

Random string on button press

I am trying to get a random string from an array when I press a button.

So far it works with getting a random string when the application starts up, but I cannot get it to work on press of a button after startup.

EDIT: It now crashes on start up??

My new code:

private String[] myString;
private static final Random rgenerator = new Random();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);



    TextView tv = (TextView) findViewById(R.id.joke);
  Resources res = getResources();

    myString = res.getStringArray(R.array.Jokes); 

    String q = myString[rgenerator.nextInt(myString.length)];    
    tv.setText(q);
    Button btn = (Button)findViewById(R.id.button);


 btn.setOnClickListener(new OnClickListener() { 
public void onClick(View v) {

    myString = res.getStringArray(R.array.Jokes); 

    String q = myString[rgenerator.nextInt(myString.length)];    
    tv.setText(q);
  }
});

}
}

Logcat says:

03-31 22:47:35.777: W/dalvikvm(1152): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
03-31 22:47:35.777: E/AndroidRuntime(1152): Uncaught handler: thread main exiting due to uncaught exception
03-31 22:47:35.903: E/AndroidRuntime(1152): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.jc.dkjokes/com.jc.dkjokes.DanskeJokesMain}: java.lang.NullPointerException
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.os.Looper.loop(Looper.java:123)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.ActivityThread.main(ActivityThread.java:4363)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at java.lang.reflect.Method.invokeNative(Native Method)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at java.lang.reflect.Method.invoke(Method.java:521)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at dalvik.system.NativeStart.main(Native Method)
03-31 22:47:35.903: E/AndroidRuntime(1152): Caused by: java.lang.NullPointerException
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.Activity.findViewById(Activity.java:1612)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at com.jc.dkjokes.DanskeJokesMain.<init>(DanskeJokesMain.java:17)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at java.lang.Class.newInstanceImpl(Native Method)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at java.lang.Class.newInstance(Class.java:1479)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
03-31 22:47:35.903: E/AndroidRuntime(1152):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
03-31 22:47:35.903: E/AndroidRuntime(1152):     ... 11 more
03-31 22:47:35.963: I/dalvikvm(1152): threadid=7: reacting to signal 3
03-31 22:47:36.148: I/dalvikvm(1152): Wrote stack trace to '/data/anr/traces.txt'

Upvotes: 0

Views: 1892

Answers (3)

AnumShafiq
AnumShafiq

Reputation: 385

you have to define onClickListener() for generating string on button click, Something like this,

    Button btn = (Button)findViewbyId(R.id.yourbuttonid);
    btn.setonclickListener(new onClickListner(){
          public void onclick()
          {
               //write your oncreate code here again
          }
    });

Upvotes: 1

Chirag
Chirag

Reputation: 56925

To achieve that you need to declare one button in your main.xml file then you have to initialize that in your activity. Then after you have to set on click event listener on that button.

<Button
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:id="@+id/buttonClick"
    />

Code

TextView tv = (TextView) findViewById(R.id.joke);
Button btn = (Button)findViewbyId(R.id.buttonClick);
    btn.setonclickListener(new onClickListner(){
          public void onclick()
          {
               myString =  getResources().getStringArray(R.array.Jokes); 
               String q = myString[rgenerator.nextInt(myString.length)];
               tv.setText(q);
          }
    });

Upvotes: 0

Alex Lockwood
Alex Lockwood

Reputation: 83313

You haven't defined an onClickListener for your Button. Do so as follows:

Button button = findViewById(R.id.button);
TextView tv = findViewById(R.id.joke);

button.setOnClickListener(new OnClickListener()  
    public void onClick(View view) {
        String[] myString = getResources().getStringArray(R.array.Jokes); 
        tv.setText(myString[rgenerator.nextInt(myString.length)]);
    }
});

Upvotes: 0

Related Questions