安卓:无法定位code错误? [英] Android: unable to locate error in code?
问题描述
据我所知,这是希望任何人回答很长篇大论的要求,但我已尽力,我能想到的解决这个查询自己的一切。
在我的Android应用程序,我首先有这样的活动,需要用户输入(数字),并将其传递到下一个活动:
公共类实践活动扩展实现View.OnClickListener { //声明瓦尔
按钮GO2;
的EditText enterNumber2;
TextView的TOP2;
TextView的bottom2;
私人整数convertedNumber2; //改回私人整数? @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); //设置等于文本布局视图
的setContentView(R.layout.practice); //调用方法intialise瓦尔
initialiseVars(); //在点击侦听器编辑的文字和按钮设置
go2.setOnClickListener(本);
enterNumber2.setOnClickListener(本); } //上创建结束 / **
*方法来初始化所有的按钮,textviews等用来清理
*对的onCreate。
* /
私人无效initialiseVars(){
//设置从XML(初始化)所有的按钮文本视图等
//(VID 25)
GO2 =(按钮)findViewById(R.id.btnGoPractice);
enterNumber2 =(EditText上)findViewById(R.id.etEnterNumberPractce);
TOP2 =(的TextView)findViewById(R.id.tvTopPractice);
bottom2 =(的TextView)findViewById(R.id.tvBottomPractice); } / **
*与点击监听方法,对所有添加了功能
*按钮,文本等意见
*
* @参数v
* /
公共无效的onClick(查看视图){ 这就决定了被点击了什么// switch语句
开关((视图).getId()){
案例R.id.btnGoPractice: //设置等于什么在EDITTEXT键入的文本视图
。最终的字符串项= enterNumber2.getText()的toString()修剪(); //得到你的电话号码
entry.replaceAll(\\\\ D +,); //可能删除 尝试{
convertedNumber2 =的Integer.parseInt(输入);
}赶上(例外五){
// TODO:处理异常
e.printStackTrace();
} 意向意图=新意图(这一点,PracticeTest.class);
如果(convertedNumber2> = 1&安培;&安培; convertedNumber2< = 12){
intent.putExtra(convertedNumber2,convertedNumber2);
的System.out.println(有效数量);
}其他{
的System.out.println(无效号码);
}
startActivity(意向);
/ **
*取消注释这如果以上不工作
//设置等于什么在最后的EditText键入的文本视图
*字符串项= enterNumber2.getText()的toString()。
*
* //从字符串值转换为int convertedNumber2 =
*的Integer.parseInt(输入);
*
*意向意图=新意图(这一点,PracticeTest.class);如果
*(convertedNumber2> = 1&安培;&安培; convertedNumber2< = 12){
* intent.putExtra(convertedNumber2,convertedNumber2);
* startActivity(意向); }其他{
*的System.out.println(无效号码); }
*
*突破;默认内容:System.out.println(无效条目);打破;
*
*}
* / }
}} // C结束
以下活动临危数量,并开始通过问题基础上,循环数(乘次表):
公共类PracticeTest扩展活动实现View.OnClickListener { //声明瓦尔
INT乘数;
INT [] =结果INT新[12];
INT numberPassed;
TextView的问题;
EDITTEXT回答;
INT分;
的String [] =的问题新的String [12]; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 的setContentView(R.layout.practicetest); //这个声明并int变量,从分配给它的一个int值
//调用意图,如果它不存在它默认为0
numberPassed = getIntent()getIntExtra(convertedNumber2,0); //设置的VAR(可能做到这一点在不同的方法?
按钮提交=(按钮)findViewById(R.id.btnGoPractice2);
回答=(EditText上)findViewById(R.id.etEnterNumberPractice2);
问题=(的TextView)findViewById(R.id.tvTopPractice2); //设置监听器
submit.setOnClickListener(本); updateQuestion(); } 公共无效的onClick(查看视图){ //设置等于什么在EDITTEXT键入的文本视图
最终字符串项= answer.getText()的toString()。 //从字符串值转换为int
int类型的=的Integer.parseInt(输入); //注意:也许改名 结果[乘数 - 1] = A;
得分++; //无关? 如果(乘数下; 12){ //称为给出答复后,
updateQuestion(); }其他{
//的System.out.println(分);
意向意图=新意图(这一点,Results.class);
intent.putExtra(结果,结果);
intent.putExtra(numberPassed,numberPassed);
intent.putExtra(问题的问题);
this.startActivity(意向);
} } 公共无效updateQuestion(){ 乘数++; //字符串来保存的追求
串Q = numberPassed +X+乘数+=;
问题[乘数 - 1] = Q;
question.setText(问题[乘数 - 1]);
answer.setText(); }}
这个活动,然后把用户的回答等,并把它们传递给本次活动:
公共类结果扩展活动{ @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.results); ListView控件ITEMLIST =(ListView控件)findViewById(R.id.lvresults); //会从$ P $光伏阵列的行为
INT [] =结果getIntent()getIntArrayExtra(结果)。 INT numberPassed = getIntent()getIntExtra(numberPassed,0); 的String [] =问题getIntent()getStringArrayExtra(问题); ArrayList的< HashMap的<字符串,字符串> >名单=新的ArrayList< HashMap的<字符串,字符串> > ();
//循环给列表视图
的for(int i = 1; I< = 12;我++)
{
INT userAnswer =结果[I - 1]; INT expectedAnswer = numberPassed *我; 串userString = numberPassed +×+ I +=+ userAnswer;
串expectedString =+ expectedAnswer; HashMap的<字符串,字符串>地图=新的HashMap<字符串,字符串> (); map.put(用户,userString);
map.put(预期,expectedString); list.add(地图);
} //实例化定制阵列适配器
MyArrayAdapterPractice适配器=新MyArrayAdapterPractice(this.getApplicationContext(),R.layout.list_row_practice,列表,问题的结果); //在这里设置的自定义适配器的ListView的。
itemList.setAdapter(适配器); }
}
在这个过程中我用下面的适配器:
公共类MyArrayAdapterPractice扩展ArrayAdapter< ArrayList的<&HashMap的LT;字符串,字符串>>>
{
上下文mContext;
ArrayList的<&HashMap的LT;字符串,字符串>> mQuestionArrayList;
INT mLayoutResourceId;
的String [] mQuestionsArray;
INT [] mUsersAnswers; 公共MyArrayAdapterPractice(上下文的背景下,INT layoutResourceId,ArrayList的<&HashMap的LT;字符串,字符串>> questionsArrayList,字符串[] questionsArray,INT [] usersAnswers)
{
超(背景下,layoutResourceId);
mContext =背景;
this.mQuestionArrayList = questionsArrayList;
this.mLayoutResourceId = layoutResourceId;
this.mQuestionsArray = questionsArray;
this.mUsersAnswers = usersAnswers;
} @覆盖
公众诠释getCount将()
{
返回mQuestionArrayList.size();
} @覆盖
公共查看getView(INT位置,查看排,父母的ViewGroup)
{
HashMap的<字符串,字符串>问题= mQuestionArrayList.get(位置); LayoutInflater吹气= LayoutInflater.from(mContext); //在这里你将初始化排布置,通过虚报xml文件list_row。
行= inflater.inflate(this.mLayoutResourceId,父母,假); //这里我们初始化的list_row布局定义的这两个TextViews。
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 [位置]);
answerTxtView.setText(将String.valueOf(mUsersAnswers [位置]));
correctAnswerTxtView.setText(question.get(预期)的toString()); //这只是一个伪code,显示您何时以及如何设置的颜色
// TextView的编程。
如果(mUsersAnswers [位置]!=的Integer.parseInt(question.get(预期)。的toString()))
answerTxtView.setTextColor(Color.RED);
其他
answerTxtView.setTextColor(Color.GREEN); 返回行;
}
}
最后,这是logcat的错误跟踪,我得到的,当我尝试运行code(请注意,模拟器削减了就像results.java活动即将开启):
04-28 19:03:54.792:E / AndroidRuntime(1059):致命异常:主要
04-28 19:03:54.792:E / AndroidRuntime(1059):工艺:com.example.multapply,PID:1059
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.parseInt(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)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.AbsListView.obtainView(AbsListView.java:2263)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.ListView.onMeasure(ListView.java:1175)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.View.measure(View.java:16497)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.View.measure(View.java:16497)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.View.measure(View.java:16497)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-28 19:03:54.792:E / AndroidRuntime(1059):在com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.View.measure(View.java:16497)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
04-28 19:03:54.792:E / AndroidRuntime(1059):在com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2291)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.View.measure(View.java:16497)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5670)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.Choreographer.doCallbacks(Choreographer.java:574)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.Choreographer.doFrame(Choreographer.java:544)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.os.Handler.handleCallback(Handler.java:733)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.os.Handler.dispatchMessage(Handler.java:95)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.os.Looper.loop(Looper.java:136)
04-28 19:03:54.792:E / AndroidRuntime(1059):在android.app.ActivityThread.main(ActivityThread.java:5017)
04-28 19:03:54.792:E / AndroidRuntime(1059):在java.lang.reflect.Method.invokeNative(本机方法)
04-28 19:03:54.792:E / AndroidRuntime(1059):在java.lang.reflect.Method.invoke(Method.java:515)
04-28 19:03:54.792:E / AndroidRuntime(1059):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
04-28 19:03:54.792:E / AndroidRuntime(1059):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-28 19:03:54.792:E / AndroidRuntime(1059):在dalvik.system.NativeStart.main(本机方法)
要那个地方的错误就在于,你要的阅读的堆栈跟踪。这是有关部分(重点煤矿):
19 04-28:03:54.792:E / AndroidRuntime(1059): java.lang.NumberFormatException:无效INT:9
19 04-28:03:54.792:E / AndroidRuntime(1059):在java.lang.Integer.invalidInt(Integer.java:137)
19 04-28:03:54.792:E / AndroidRuntime(1059):在java.lang.Integer.parse(Integer.java:374)
19 04-28:03:54.792:E / AndroidRuntime(1059):在java.lang.Integer.parseInt(Integer.java:365)
19 04-28:03:54.792:E / AndroidRuntime(1059):在java.lang.Integer.parseInt(Integer.java:331)
19 04-28:03:54.792:E / AndroidRuntime(1059):是在com.example.multapply.MyArrayAdapterPractice.getView(MyArrayAdapterPractice.java:59)
块引用>所以,这意味着该错误是在文件的第59行抛出的 MyArrayAdapterPractice.java 的,里面的方法
MyArrayAdapterPractice#getView
。你只需要进入您当前code的那部分,检查并解决问题。从分析中,该错误信息是非常具体的:
java.lang.NumberFormatException:无效INT:9
您可以发送
9
,并不能转换成整数
。修剪字符串,然后解析它。这是有问题的行:
如果(mUsersAnswers [位置]!=的Integer.parseInt(question.get(预期)。的toString()))
将其转换为
如果(mUsersAnswers [位置]!=的Integer.parseInt(question.get(预期)。的toString()。修剪()))
I understand that it is a very long winded request to expect anyone to answer but I have tried everything that I can think of to solve this query myself.
In my android application I firstly have this activity that takes a users input (number) and passes it to the next activity:
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
The following activity recieves the number and starts cycling through questions based on the number (multiplication times tables):
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(""); } }
This activity then takes the user's answers etc and passes them to this activity:
public class Results extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.results); ListView itemList = (ListView) findViewById(R.id.lvresults); //gets arrays from prev act int[] results = getIntent().getIntArrayExtra("results"); int numberPassed = getIntent().getIntExtra("numberPassed", 0); String[] questions= getIntent().getStringArrayExtra("questions"); ArrayList < HashMap <String, String> > list = new ArrayList < HashMap <String, String> > (); // loop to give list view for (int i = 1; i <= 12; i++) { int userAnswer = results[i - 1]; int expectedAnswer = numberPassed * i; String userString = numberPassed + " x " + i + " = " + userAnswer; String expectedString = " " + expectedAnswer; HashMap <String, String> map = new HashMap <String, String> (); map.put("user", userString); map.put("expected", expectedString); list.add(map); } // Instantiate custom array adapter MyArrayAdapterPractice adapter = new MyArrayAdapterPractice(this.getApplicationContext(), R.layout.list_row_practice, list, questions, results); // Here you set the custom adapter to your ListView. itemList.setAdapter(adapter); } }
Throughout this process I use the following adapter:
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; } }
And finally this is the logcat error trace that I get when i try to run the code (note that the emulator cuts out just as the results.java activity is about to open):
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)
解决方案To spot where the error lies, you have to read the stacktrace. This is the relevant part (emphasis mine):
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)
So, this means the error was thrown in line 59 of file MyArrayAdapterPractice.java, inside method
MyArrayAdapterPractice#getView
. You just have to go to that part of your current code, inspect the problem and fix it.From the analysis, the error message is very specific:
java.lang.NumberFormatException: Invalid int: " 9"
You're sending
" 9"
and it cannot be converted into anInteger
. Trim the string, then parse it.This is the problematic line:
if(mUsersAnswers[position] != Integer.parseInt(question.get("expected").toString()))
Convert it to
if(mUsersAnswers[position] != Integer.parseInt(question.get("expected").toString().trim()))
这篇关于安卓:无法定位code错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!