2013-07-28 5 views
0

Java 및 Android 응용 프로그램을 처음 사용합니다. 나는 지금 내가하고있는 연습 코드로 어떤 일이 일어나는 지 모른다. 그것은 java.lang.RuntimeException: Unable to start activity ComponentInfo{}:java.lang.ClassCastException: android.widget.LinearLayout에 의해 강제로 닫히기를 계속합니다.ClassCastException으로 인해 응용 프로그램이 실행되지 않습니다.

로그 캣

07-28 17:29:44.870: D/AndroidRuntime(518): Shutting down VM 

07-28 17:29:44.870: W/dalvikvm(518): threadid=1: thread exiting with uncaught exception (group=0x40015560) 

07-28 17:29:44.880: E/AndroidRuntime(518): FATAL EXCEPTION: main 

07-28 17:29:44.880: E/AndroidRuntime(518): java.lang.RuntimeException: Unable to start 
activity  
ComponentInfo{com.Elson.ProjectVersion/com.Elson.ProjectVersion.EnterScoresActivity}:  java.lang.ClassCastException: android.widget.LinearLayout 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.os.Handler.dispatchMessage(Handler.java:99) 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.os.Looper.loop(Looper.java:130) 

07-28 17:29:44.880: E/AndroidRuntime(518): at android.app.ActivityThread.main(ActivityThread.java:3683) 

07-28 17:29:44.880: E/AndroidRuntime(518): at java.lang.reflect.Method.invokeNative(Native Method) 

07-28 17:29:44.880: E/AndroidRuntime(518): at 
java.lang.reflect.Method.invoke(Method.java:507) 

07-28 17:29:44.880: E/AndroidRuntime(518): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 

07-28 17:29:44.880: E/AndroidRuntime(518): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 

07-28 17:29:44.880: E/AndroidRuntime(518): at dalvik.system.NativeStart.main(Native Method) 
07-28 17:29:44.880: E/AndroidRuntime(518): Caused by: java.lang.ClassCastException: android.widget.LinearLayout 

07-28 17:29:44.880: E/AndroidRuntime(518): at com.Elson.ProjectVersion.EnterScoresActivity.setUpViews(EnterScoresActivity.java:142) 

07-28 17:29:44.880: E/AndroidRuntime(518): at com.Elson.ProjectVersion.EnterScoresActivity.onCreate(EnterScoresActivity.java:42) 
07-28 17:29:44.880: E/AndroidRuntime(518): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

07-28 17:29:44.880: E/AndroidRuntime(518): at 

android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1611)

07-28 17:29:44.880: E/AndroidRuntime(518): ... 11 more 

.xml 파일 (enter_scores.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_gravity="center_horizontal" 
android:gravity="center_horizontal" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".EnterScoresActivity" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingTop="10dp" 
    android:text="Enter Bowling Scores:" 
    android:textSize="25sp" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/DateTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingTop="10dp" 
     android:text="Date of Games" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Button 
     android:id="@+id/changeDateButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Change Date" /> 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/SaveButton" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_horizontal" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Game1:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <EditText 
      android:id="@+id/Game1EditText" 
      android:layout_width="66dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:inputType="number" 
      android:text="300" > 

      <requestFocus /> 
     </EditText> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Game2:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <EditText 
      android:id="@+id/Game2EditText" 
      android:layout_width="66dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:inputType="number" 
      android:text="300" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Game3:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <EditText 
      android:id="@+id/Game3EditText" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" 
      android:inputType="number" 
      android:text="300" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Series Total:" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/SeriesTotalTextView" 
      android:layout_width="50dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:text="900" /> 

    </LinearLayout> 

    <Button 
     android:id="@+id/SaveButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Save" 
     tools:ignore="DuplicateIds" /> 

    <Button 
     android:id="@+id/ShowHistory" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ShowHistory" /> 

</LinearLayout> 

엔테 rScoresActivity.java

로그 캣에서 스택 트레이스를 읽는 방법을 학습
package com.Elson.ProjectVersion; 

import java.text.DateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.DatePickerDialog; 
import android.content.DialogInterface; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.TextView; 

public class EnterScoresActivity extends Activity { 

private Button saveButton; 
private Button historyButton; 
private EditText game1ScoreEditText; 
private EditText game2ScoreEditText; 
private EditText game3ScoreEditText; 
private TextView date; 
private TextView seriesTotal; 
private Button changeDateButton; 


private int month;//private within class 
private int day; 
private int year; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.enter_scores); 

    setUpViews(); 


    //put today's date on the screen 
    Calendar calendar =Calendar.getInstance(); 
    year = calendar.get(Calendar.YEAR); 
    month = calendar.get(Calendar.MONTH); 
    day = calendar.get(Calendar.DAY_OF_MONTH); 

    Date today = calendar.getTime(); 
    DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); 
    String cs = df.format(today); 
    date.setText(cs); 
} 

/* 
* Get the 3 scores from the interface, validate the scores 
create an object to hold the scores. 
*/ 

public void saveClickHandler(View v){ 
    String rawScore; 
    rawScore = game1ScoreEditText.getText().toString(); 
    int score1 = Integer.parseInt(rawScore); 
    rawScore = game2ScoreEditText.getText().toString(); 
    int score2 = Integer.parseInt(rawScore); 
    rawScore = game3ScoreEditText.getText().toString(); 
    int score3 = Integer.parseInt(rawScore); 

    Log.d("EnterScores" , "I hear the Save Button"); 


    if(isValid(score1) && isValid(score2) && isValid(score3)) { 
     BowlingScores bowlingScores; 
     Date dateofGames= new Date(year,month,day); 
     bowlingScores= new BowlingScores(score1, score2, score3, dateofGames); 

     seriesTotal.setText(bowlingScores.calculateSeriesScore()); 

     MyBowlingScoresApplication app = (MyBowlingScoresApplication) getApplication(); 
     app.addBowlingScores(bowlingScores); 


    }else { 
     //pop up a dialog that dad is invalid 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Invalid Scores") 
       .setMessage("Bowling scores cannot be greater than 300") 
       .setCancelable(false) 
       .setPositiveButton("OK", 

       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog alert = builder.create(); 
     alert.show(); 

    } 
} 

private boolean isValid(int score){ 
    if(score >=0 && score <=300) 
     return true; 
    return false; 
} 

public void changeDateClickHandler(View v){ 
    Log.d("Enter Scores", "I heear the Change Date Button"); 

    DatePickerDialog.OnDateSetListener datePickerListener; 

    datePickerListener = new DatePickerDialog.OnDateSetListener(){ 

     @Override 
     public void onDateSet(DatePicker view, int yearOfYear, int monthOfYear, 
       int dayOfMonth) { 
      // TODO Auto-generated method stub 
      year=yearOfYear; 
      month= monthOfYear; 
      day=dayOfMonth; 

      Calendar cal= new GregorianCalendar(year , month , day); 
      Date dateofGames = cal.getTime(); 
      DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); 
      String cs= df.format(dateofGames); 
      date.setText(cs); 
     } 

    }; 

    DatePickerDialog dpd = new DatePickerDialog(this,datePickerListener,year,month,day); 
    dpd.show(); 
} 
private void setUpViews(){ 
    saveButton= (Button) findViewById(R.id.SaveButton); 
    game1ScoreEditText =(EditText) findViewById(R.id.Game1EditText); 
    game2ScoreEditText =(EditText) findViewById(R.id.Game2EditText); 
    game3ScoreEditText =(EditText) findViewById(R.id.Game3EditText); 
    date = (TextView) findViewById(R.id.DateTextView); 
    seriesTotal = (TextView) findViewById(R.id.SeriesTotalTextView); 

} 

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

} 
+0

일부 돌이켜 보면 : 자바를 처음 접한다면 안드로이드에 빠지지 마십시오. 또한,'... EnterScoresActivity.java:142)'는 관련 선입니다.해당 파일에서 142 행을보고 잘못된 캐스트가 있는지 확인하십시오. (당신은 구글 캐스팅과'ClassCastException'을 원할 것입니다.) – keyser

+0

누군가를 실망시키지 않고 솔루션을 제공하십시오, 모두가 언젠가 그들의 첫 발걸음을 내딛습니다. – Darpan

답변

2

:

  • 이것을 로그 캣 라인 :

    Caused by: java.lang.ClassCastException: android.widget.LinearLayout` 
    

    응용 프로그램에서 당신에게 예외를 알려줍니다.

  • 이 다른 라인 : 예외가 제기와 위치를 수정보고해야하는 위치

    at com.Elson.ProjectVersion.EnterScoresActivity.setUpViews(EnterScoresActivity.java:142) 
    

    당신을 알려줍니다. 배경으로이 정보와

,의는 EnterScoresActivity.java에 라인 (142)을 추구 할 수 있습니다.
saveButton= (Button) findViewById(R.id.SaveButton); 

이 ID SaveButton를 가진 요소처럼 보인다

LinearLayout이고 당신이에 캐스팅을하려고하고 있습니다 : 당신은/붙여 넣기 전체 클래스를 복사하기 때문에,이 선 결과 범인을 쉽게 찾을 수 Button. 이를 확인하려면 xml보기를 확인하고 id가 SaveButton 인 요소를 검색하십시오. 질문에 XML에서, 우리는이를 발견 할 것이다 :
<LinearLayout 
    android:id="@+id/SaveButton" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_horizontal" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

지금이 문제입니다 :이 LinearLayout의 ID보기를 편집하는 동안 당신이 만든 아마 실수 SaveButton입니다.

솔루션?

가능한 해결책은이 LinearLayout 대신 해당 버튼에 SaveButton ID를 설정하는 것입니다. 코드에서

+0

잘 설명해 주셨습니다. 잘 했어! – Darpan

+0

와우. 이것은 정말 잘 설명되어 있습니다. 나 같은 초보자조차도 하하를 이해할 수있었습니다. 도와 주셔서 정말로 고맙습니다. 그것은 효과가 있었다. 그것은 학교 프로젝트입니다. 그렇습니다. 나는 선택의 여지가별로 없습니다. 처음부터 배우는 것은 흥미 롭습니다! 다시 한번 감사드립니다 ... U는 말 그대로 내 인생을 저장했습니다. 하하! –

+0

@ 엘슨 당신을 진심으로 환영합니다. –

0

<LinearLayout 
    android:id="@+id/SaveButton" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_horizontal" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 
.... 
<Button 
    android:id="@+id/SaveButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Save" 
    tools:ignore="DuplicateIds" /> 

당신이 두 버튼 및 선형 레이아웃 민병대 같은 id 값이 ... 단지 다른 아이디 값을 변경하고 사용 해보세요하려고 것을 볼 수 있습니다

관련 문제