2012-05-10 6 views
0

버튼을 누를 때 배열에서 임의의 문자열을 가져 오려고합니다.버튼 누름시 임의의 문자열

지금까지는 응용 프로그램이 시작될 때 임의의 문자열을 얻는 방식으로 작동하지만 시작한 후 버튼을 누르면 작동하지 않습니다.

편집 : 시작시 충돌이 발생합니다. ??

내 새로운 코드 :

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); 
    } 
}); 

} 
} 

로그 캣는 말한다 :

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' 
  • SnoX
+1

버튼의 클릭 이벤트 또는 코드는 어디에 있습니까? –

+0

버튼이 반응이 있습니까? 그리고 네, 코스의 관련 코드를 게시해야합니다 ... – keyser

+0

어디 onClick 이벤트입니다. onClick을 검색하여 수천 가지 예를 찾으십시오. 또한 임의의 문자열을 함수로 가져 오도록 코드를 옮길 것입니다. 그렇게하면 onCreate에서 작동하면 어디에서나 작동합니다. 코드를 게시 할 때 더 이상 문제가 없으면 다른 사람이 점프합니다. – cstrutton

답변

0

당신이 다음 main.xml에 파일에 하나 개의 버튼을 선언 할 필요가 있음을 달성하기 위해 당신은 당신의 활동에서 그것을 초기화해야합니다. 그런 다음 해당 버튼에 대한 클릭 이벤트 리스너를 설정해야합니다.

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

당신은 onClickListener에 대한 정의하지 않은

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); 
      } 
    }); 
+0

이제 충돌이 발생합니다. – SnoX

+0

어디서? 설명해 주시겠습니까? –

+0

첫 번째 게시물 업데이트 – SnoX

1

당신이 버튼을 클릭, 이런 식으로 뭔가에 문자열을 생성하는 OnClickListener를()를 정의해야

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

코드 귀하의 Button. 다음과 같이하십시오.

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)]); 
    } 
});