0

获取字符串我做了一个应用程序,使EditText上田动态用户的choise,并从中获取文本。 这是我如何设置我的EditText字段: 用户从微调控制器和EditText字段中选择选项出现与他想要的参数。 EditText ID是行号是微调器。 我的代码中的“field”参数在程序开始时已经被分解了。 代码:从EditText上NullPointerException异常错误

public void setTheEditTextFiled(View rowNumber, LinearLayout linearLayout, EditText field, LayoutParams b){ 
    field = new EditText(this); 
    field.setLayoutParams(b); 
    field.setId(parametersChoose.getPositionForView(rowNumber)); 
    linearLayout.addView(field); 

} 

这似乎做工精细,我让我的EditText场,我想他。 现在我想要输入用户输入的文本,并按下“保存”按钮将其放入数据库中。 这是我的代码:

public void onClick(View v) { 

    switch(v.getId()) 
    { 
    case R.id.addWorkOut: 
    { 
     String exercise; 
     String weight = ""; 
     String reps = ""; 


     try{ 
     if(findViewById(0) != null) 
      weight = myWeight.getText().toString(); 
     if(findViewById(1) != null) 
      reps = myReps.getText().toString(); 
     } 
     catch (Exception e){ 

      Toast.makeText(this, "bad", Toast.LENGTH_SHORT).show(); 
     } 

     exercise = addNewExercise.getText().toString(); 
     date = getIntent().getExtras(); 

     if(exercise.equals("") == false) 
      exercise = addNewExercise.getText().toString(); 
     else 
      exercise = workOutChoose.getSelectedItem().toString(); 

     DataBaseMain data = new DataBaseMain(this); 
     data.open(); 
     data.createEntry(date.getString("date"), exercise, weight, reps); 
     data.close(); 
        break; 

}

我也试着这样称呼它:

if((EditText) findViewById(0) != null) 

,但其现在的工作。

这里的奇怪的事情,那是用来工作。突然它不要,我不知道为什么,我得到这个错误logcat中:

05-07 20:00:45.159: E/AndroidRuntime(2045): FATAL EXCEPTION: main 
05-07 20:00:45.159: E/AndroidRuntime(2045): java.lang.NullPointerException 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at com.example.workoutlog.AddWorkOutPage.onClick(AddWorkOutPage.java:112) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at android.view.View.performClick(View.java:4204) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at android.view.View$PerformClick.run(View.java:17355) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at android.os.Handler.handleCallback(Handler.java:725) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at android.os.Looper.loop(Looper.java:137) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-07 20:00:45.159: E/AndroidRuntime(2045):  at dalvik.system.NativeStart.main(Native Method) 

此行日志猫(AddWorkOutPage.java:112):

com.example.workoutlog.AddWorkOutPage.onClick(AddWorkOutPage.java:112) 

是此行的代码:

weight = myWeight.getText().toString(); 

一些他如何得到的是ID。

另一件事,我因子评分的存在与领域的EditText我的ID设置的问题。 但我有另一种方法,它通过它自己的ID删除EditText字段,并且此方法正在工作。所以EditText字段的ID似乎很好。

我试图项目 - >干净。 试图删除R.java。 试图安装/解除应用程序。 没有什么帮助。

我检查了我的XML代码我没有duplicare的ID,这是我的XML代码:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

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

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

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Set new Exercise type or choose from the lsit below" /> 


    <EditText 
     android:id="@+id/newExercise" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" > 

    </EditText> 

    <Spinner 
     android:id="@+id/workOutChoose" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <Spinner 
     android:id="@+id/parametersChoose" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

     <ScrollView 
      android:id="@+id/scroll" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <LinearLayout 
       android:id="@+id/test" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" > 



      </LinearLayout> 

     </ScrollView> 



    ></LinearLayout> 

感谢帮助:)

+2

我看不到你在哪里得到'myWeight'。我希望看到一行看起来像'myWeight =(EditText)findViewById(R.id.myWeight);'某处。 – 2013-05-07 20:08:52

+0

你用findViewById(0)表示你的意思是什么? – 2013-05-07 20:12:38

+0

我设置了EditText myWeight;在节目的乞讨中,我没有把它放在这里。现在在XML代码中没有这样的项目,我从java代码中创建它,所以我无法通过findViewById调用他。我使用setTheEditTextFiled方法,我放在我的问题顶部 – tomer 2013-05-07 20:13:04

回答

0

添加这样的事情:

 EditText weight = (EditText)findViewByID(R.id.myWeight); 

你需要引用您的的id EditText

+0

weight是一个字符串。你可能是指myWeight。 我做了myWeight.setId(parametersChoose.getPositionForView(rowNumber)); parametersChoose.getPositionForView(rowNumber)= 0或1. – tomer 2013-05-07 20:27:55

+0

只需将您设置的变量名称添加到edittext。 – 2013-05-07 20:30:47

0

什么是findViewByID(0)

当你将组件添加到您的布局ID是由R文件自动生成。

所以你需要添加与ID布局的EditText:“myWeight” ,并得到它:

EditText weight = (EditText)findViewByID(R.id.myWeight); 

它不建议通过一些数字来获取视图..它会给你一个错误或ID将不被涉及到正确的组件。 见,现在,当你写findViewById(0),0可以与任何东西,就像你布局的按钮..所以这就是为什么人们使用R.id.someID的R文件 将您在布局中给出的Id名称与某些整数进行匹配。 这样就可以防止错误的,因为你现在所拥有的(它不给你正确的组件)

+0

我做了myWeight.setId(parametersChoose.getPositionForView(rowNumber)); parametersChoose.getPositionForView(rowNumber)= 0或1. – tomer 2013-05-07 20:26:53

-1

嗯,我设法解决它。对于在应用程序中处理动态字段的任何人来说,这是解决方案。 感谢谁帮我,这是解决方案: 我只需要在myWeight上查找if语句就是ID outsite。 :)

... 
... 

myWeight = (EditText) findViewById(0); 
myReps = (EditText) findViewById(1); 


     if(myWeight != null) 
      weight = myWeight.getText().toString(); 
     if(myReps != null) 
      reps = myReps.getText().toString(); 

... 
... 
+0

ID是自动生成的。你应该在xml布局文件中提供一个id,并从java类中引用它作为myWeight =(EditText)findViewById(R.id.id_that_you_used_in_xml);' – dmSherazi 2014-01-16 09:58:22

相关问题