2014-03-04 1 views
0

발견 된 오류의 stacktrace는 다음과 같습니다. 매우 간단한 코드이고 그 이유를 알 수 없습니다. 문제를 해결해보십시오.MainActivity 스레드의 ClasscastException

03-04 21:09:11.837: E/AndroidRuntime(902): FATAL EXCEPTION: main 
    03-04 21:09:11.837: E/AndroidRuntime(902): java.lang.RuntimeException: Unable to start activity ComponentInfo{candyhive.bitcream.candy/candyhive.bitcream.candy.Loadscreen}: java.lang.ClassCastException: android.widget.TextView 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.os.Handler.dispatchMessage(Handler.java:99) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.os.Looper.loop(Looper.java:123) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at java.lang.reflect.Method.invokeNative(Native Method) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at java.lang.reflect.Method.invoke(Method.java:507) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at dalvik.system.NativeStart.main(Native Method) 
    03-04 21:09:11.837: E/AndroidRuntime(902): Caused by: java.lang.ClassCastException: android.widget.TextView 
    03-04 21:09:11.837: E/AndroidRuntime(902): at candyhive.bitcream.candy.Loadscreen.onCreate(Loadscreen.java:87) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    03-04 21:09:11.837: E/AndroidRuntime(902): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
    03-04 21:09:11.837: E/AndroidRuntime(902): ... 11 more 

코드 : 그것은 라인 IV2 = findViewById를 (R.id.imageview2)에 오류가 표시

public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_loadscreen); 
     e1= (EditText) findViewById(R.id.editText1); 
     r1=new Random(); 
     iv1 = (ImageView) findViewById(R.id.imageView1); 
     iv1.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       s= e1.getText().toString(); 
       if(s.matches("")){ 
        int time=2000; 
        Toast.makeText(Loadscreen.this, "Please specify the level", time).show(); 
       } 
       else{ 
        int str= Integer.valueOf(s); 
        if(str>0 && str<11){ 
         calculate(str); 
         r2=new Random(); 
         int nxt = r2.nextInt(2); 
         if(nxt==0){ 
          Intent i1= new Intent(Loadscreen.this,Game.class); 
          i1.putExtra("music", music); 
          i1.putExtra("sound", sound); 
          i1.putExtra("max",max); 
          i1.putExtra("candymax", candymax); 
          startActivity(i1); 
          Loadscreen.this.finish(); 
         } 
         else{ 
          Intent i1= new Intent(Loadscreen.this,Game01.class); 
          i1.putExtra("music", music); 
          i1.putExtra("sound", sound); 
          i1.putExtra("max",max); 
          i1.putExtra("candymax", candymax); 
          startActivity(i1); 
          Loadscreen.this.finish(); 
         } 
        } 
        else{ 
         int time=2000; 
         Toast.makeText(Loadscreen.this, "Enter a valid level", time).show(); 
        } 
       } 
      } 
     }); 
     iv2= (ImageView) findViewById(R.id.imageView2); 
     iv2.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       AlertDialog.Builder build= new AlertDialog.Builder(Loadscreen.this); 
       build.setMessage("Are you sure you want to quit the game?"); 
       build.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface arg0, int arg1) { 
         Loadscreen.this.finish(); 
        } 
       }); 
       build.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface arg0, int arg1) { 
         arg0.cancel(); 
        } 
       }); 
       build.setCancelable(false); 
       build.show(); 
      } 
     }); 

    } 

는 Classcast 예외를 말한다. 이 코드에 무슨 문제가 있다고 제안 하시겠습니까? 논리적 인 (

1) 어느 쪽이든 당신은 R.id.imageView2처럼 이름 내에 TextView 이름, 따라서 당신의 findViewById() 방법은 반환되며, 그것은 ImageView에 주조 할 수 없습니다 덕분에

+1

은 ImageView2 또는 ImageView입니까? Post R.layout.activity_loadscreen – Blackbelt

+1

layout.activity_loadscreen을 게시 할 수 있습니까? –

답변

0

이 그 이유 중 하나 때문입니다)

2) 어느 당신은 TextView과 동일 간다 프로젝트 내의 다른 R.id.imageView2 있습니다. id은 프로젝트 내에서 고유 할 필요는 없지만 이러한 상황이 발생할 수 있음을 기억하십시오.