2014-04-28 2 views
0

나는 누군가가 대답 할 것으로 기대하는 것은 매우 길다는 요청이지만 나는이 쿼리를 직접 풀기 위해 생각할 수있는 모든 것을 시도했다는 것을 이해한다.Android : 코드에서 오류를 찾을 수 없습니까?

public class Practice extends Activity implements View.OnClickListener { 

    // Declaring Vars 
    Button go2; 
    EditText enterNumber2; 
    TextView top2; 
    TextView bottom2; 
    private Integer convertedNumber2; // change back to private Integer? 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // setting equal to text layout View 
     setContentView(R.layout.practice); 

     // calling method to intialise vars 
     initialiseVars(); 

     // setting on click listeners for edit text and button 
     go2.setOnClickListener(this); 
     enterNumber2.setOnClickListener(this); 

    }// on create end 

    /** 
    * method to initialise all of the buttons, textviews etc used to clean up 
    * the onCreate. 
    */ 
    private void initialiseVars() { 
     // Setting up (initialising) all the buttons text views etc from the xml 
     // (vid 25) 
     go2 = (Button) findViewById(R.id.btnGoPractice); 
     enterNumber2 = (EditText) findViewById(R.id.etEnterNumberPractce); 
     top2 = (TextView) findViewById(R.id.tvTopPractice); 
     bottom2 = (TextView) findViewById(R.id.tvBottomPractice); 

    } 

    /** 
    * Method with on click listener that adds functionality for all of the 
    * buttons, text views etc 
    * 
    * @param v 
    */ 
    public void onClick(View view) { 

     // switch statement which determines what is clicked 
     switch ((view).getId()) { 
     case R.id.btnGoPractice: 

      // sets text view equal to whats typed in in editText 
      final String entry = enterNumber2.getText().toString().trim();// get your number 
      entry.replaceAll("\\D+","");//possibly delete 

      try { 
       convertedNumber2 = Integer.parseInt(entry); 
      } catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 

      Intent intent = new Intent(this, PracticeTest.class); 
      if (convertedNumber2 >= 1 && convertedNumber2 <= 12) { 
       intent.putExtra("convertedNumber2", convertedNumber2); 
       System.out.println("Valid number"); 
      } else { 
       System.out.println("Invalid number"); 
      } 
      startActivity(intent); 


      /** 
      * UNCOMMENT THIS IF THE ABOVE DOESNT WORK 
      // sets text view equal to whats typed in in editText final 
      * String entry = enterNumber2.getText().toString(); 
      * 
      * // convert from string value to int convertedNumber2 = 
      * Integer.parseInt(entry); 
      * 
      * Intent intent = new Intent(this, PracticeTest.class); if 
      * (convertedNumber2 >= 1 && convertedNumber2 <= 12) { 
      * intent.putExtra("convertedNumber2", convertedNumber2); 
      * startActivity(intent); } else { 
      * System.out.println("Invalid number"); } 
      * 
      * break; default: System.out.println("invalid entry"); break; 
      * 
      * } 
      */ 

     } 
    } 

}// c end 

다음 활동이 번호가 접수에와에 따라 질문을 통해 순환 시작 : 나는을 먼저 사용자 입력 (번호)를 받아 다음 활동에 전달이 활동이 내 안드로이드 응용 프로그램에서

수 (곱셈 시간 테이블) :이 활동은 다음 등 사용자의 답변을 소요하고이 활동에 전달

public class PracticeTest extends Activity implements View.OnClickListener { 

    // declare vars 
    int multiplier; 
    int[] results = new int[12]; 
    int numberPassed; 
    TextView question; 
    EditText answer; 
    int score; 
    String[] questions = new String[12]; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.practicetest); 

     // This declares and int variable, assigns it an int value from the 
     // calling Intent if its not there it is defaulted to 0 
     numberPassed = getIntent().getIntExtra("convertedNumber2", 0); 

     // setting up vars(possibly do this in different method? 
     Button submit = (Button) findViewById(R.id.btnGoPractice2); 
     answer = (EditText) findViewById(R.id.etEnterNumberPractice2); 
     question = (TextView) findViewById(R.id.tvTopPractice2); 

     // setting listeners 
     submit.setOnClickListener(this); 

     updateQuestion(); 

    } 

    public void onClick(View view) { 

     // sets text view equal to whats typed in in editText 
     final String entry = answer.getText().toString(); 

     // convert from string value to int 
     int a = Integer.parseInt(entry); // note: maybe change name 

     results[multiplier - 1] = a; 
     score++;// Irrelevant? 

     if (multiplier < 12) { 

      // called after an answer is given 
      updateQuestion(); 

     } else { 
      // System.out.println(score); 
      Intent intent = new Intent(this, Results.class); 
      intent.putExtra("results", results); 
      intent.putExtra("numberPassed", numberPassed); 
      intent.putExtra("questions", questions); 
      this.startActivity(intent); 
     } 

    } 

    public void updateQuestion() { 

     multiplier++; 

     // string to hold quest 
     String q = numberPassed + "x" + multiplier + "="; 
     questions[multiplier - 1] = q; 
     question.setText(questions[multiplier - 1]); 
     answer.setText(""); 

    } 

} 

:

나는 다음과 같은 어댑터 사용이 과정을 통해

:

public class MyArrayAdapterPractice extends ArrayAdapter<ArrayList<HashMap<String, String>>> 
{ 
    Context mContext; 
    ArrayList<HashMap<String, String>> mQuestionArrayList; 
    int mLayoutResourceId; 
    String[] mQuestionsArray; 
    int[] mUsersAnswers; 

    public MyArrayAdapterPractice(Context context, int layoutResourceId, ArrayList<HashMap<String, String>> questionsArrayList, String[] questionsArray, int[] usersAnswers) 
    { 
     super(context, layoutResourceId); 
     mContext = context; 
     this.mQuestionArrayList = questionsArrayList; 
     this.mLayoutResourceId = layoutResourceId; 
     this.mQuestionsArray = questionsArray; 
     this.mUsersAnswers = usersAnswers; 
    } 

    @Override 
    public int getCount() 
    { 
     return mQuestionArrayList.size(); 
    } 

    @Override 
    public View getView(int position, View row, ViewGroup parent) 
    { 
     HashMap<String, String> question = mQuestionArrayList.get(position); 

     LayoutInflater inflater = LayoutInflater.from(mContext); 

     // Here you will initialize the row layout, by inflating the xml file list_row. 
     row = inflater.inflate(this.mLayoutResourceId, parent, false); 

     // Here we initialize those two TextViews defined in the list_row layout. 
     TextView questionTxtView = (TextView) row.findViewById(R.id.tvPracticeQuestion); 
     TextView answerTxtView = (TextView) row.findViewById(R.id.tvPracticeAnswer); 
     TextView correctAnswerTxtView = (TextView) row.findViewById(R.id.tvPracticeCorrect); 

     questionTxtView.setText(mQuestionsArray[position]); 
     answerTxtView.setText(String.valueOf(mUsersAnswers[position])); 
     correctAnswerTxtView.setText(question.get("expected").toString()); 

     // This is just a pseudo code to show you when and how to set the colors of 
     // the TextView programatically. 
     if(mUsersAnswers[position] != Integer.parseInt(question.get("expected").toString())) 
      answerTxtView.setTextColor(Color.RED); 
     else 
      answerTxtView.setTextColor(Color.GREEN); 

     return row; 
    } 
} 

을 그리고 마지막으로이 내가 코드를 실행하려고 할 때 얻는 로그 캣 오류 추적이 (에뮬레이터 그냥 결과로 자르는 있습니다. 자바 활동)를 엽니 다하는 것입니다 : 스택 트레이스 읽기에

04-28 19:03:54.792: E/AndroidRuntime(1059): FATAL EXCEPTION: main 
04-28 19:03:54.792: E/AndroidRuntime(1059): Process: com.example.multapply, PID: 1059 
04-28 19:03:54.792: E/AndroidRuntime(1059): java.lang.NumberFormatException: Invalid int: " 9" 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at java.lang.Integer.invalidInt(Integer.java:137) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at java.lang.Integer.parse(Integer.java:374) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at java.lang.Integer.parseInt(Integer.java:365) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at java.lang.Integer.parseInt(Integer.java:331) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at com.example.multapply.MyArrayAdapterPractice.getView(MyArrayAdapterPractice.java:59) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.ListView.onMeasure(ListView.java:1175) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.View.measure(View.java:16497) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.View.measure(View.java:16497) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.View.measure(View.java:16497) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.View.measure(View.java:16497) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.View.measure(View.java:16497) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.Choreographer.doFrame(Choreographer.java:544) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.os.Handler.handleCallback(Handler.java:733) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.os.Handler.dispatchMessage(Handler.java:95) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.os.Looper.loop(Looper.java:136) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-28 19:03:54.792: E/AndroidRuntime(1059):  at dalvik.system.NativeStart.main(Native Method) 

답변

2

는 당신이, 오류가 자리하고있는 곳 발견하십시오.

04-28 19 : 03 : 54.792 : E/AndroidRuntime (1059) : java.lang.NumberFormatException의 : 잘못된 INT : "9"

이 (강조 광산) 관련 부분입니다 04/28 19 : 03 : 54.792 : E/AndroidRuntime (1059) : java.lang.Integer.invalidInt (Integer.java:137)

04-28 19 : 03 : 54.792 : E/AndroidRuntime (1059) : java.lang.Integer.parse (Integer.java:374)

04-28 19 : 03 : 54.792 : E/AndroidRuntime (1059) : java.lang.Integer.parseI NT (Integer.java:365)

04-28 19 : 03 : 54.792 : E/AndroidRuntime (1059)에서 java.lang.Integer.parseInt (Integer.java:331)

04-28 19 : 03 : 54.792 : E/AndroidRuntime (1059)에서 com.example.multapply.MyArrayAdapterPractice.getView (MyArrayAdapterPractice.java:59)

그래서, 이러한 오류가 라인 (59)에서 발생 된 의미 파일 MyArrayAdapterPractice.java, 내부 메서드 MyArrayAdapterPractice#getView. 현재 코드의 해당 부분으로 가서 문제를 검사하고 수정해야합니다. 분석에서

는 오류 메시지가 매우 구체적이다 :

java.lang.NumberFormatException: Invalid int: " 9" 

당신은 " 9"을 보내는하고 그것은 Integer로 변환 할 수 없습니다. 문자열을 다듬은 다음 구문 분석하십시오.

이 문제가있는 줄은 다음과 같습니다

if(mUsersAnswers[position] != Integer.parseInt(question.get("expected").toString())) 

나는이 시도했다

if(mUsersAnswers[position] != Integer.parseInt(question.get("expected").toString().trim())) 
+0

로 변환하고 작동하지 않습니다. 즉 최종 문자열 항목 = enterNumber2.getText(). toString(). trim(); 첫 번째 활동에서 –

+0

@ RNI2013 내 대답에 대한 업데이트를 확인하십시오. –

관련 문제