String不从EditText获取值

时间:2013-05-07 09:14:38

标签: android string android-edittext

我有一个数据库安卓应用程序,我想知道为什么插入后数据库中没有任何内容。现在,我发现了我的问题,但我无法追踪它。

        EditText ename = (EditText) findViewById(R.id.eetName);
        final String name = ename.getText().toString();

        EditText ezeit = (EditText) findViewById(R.id.eetDatum);
        final String zeit = ezeit.getText().toString();

        EditText egenaueres = (EditText) findViewById(R.id.eetGenaueres);
        final String genaueres = egenaueres.getText().toString();

        Button bSave = (Button) findViewById(R.id.btEreignis);
        System.out.println("sdssssssssssssssssss" + name + zeit + genaueres);

        bSave.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                try{
                    db.insertereignis(name, zeit, genaueres);
                }
                catch(Exception e){
                    System.out.println("Insert des Ereignisses fehlgeschlagen!");
                }
            }
        });
    }

这是我的插入方法。在System.out.printlnnamezeitgenaueres为空,但我不明白为什么。

这是我的xml:

<EditText
        android:id="@+id/eetName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="56dp"
        android:ems="10"
        android:hint="Name des Ereignisses"
        android:textColor="@color/black" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/eetDatum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/eetName"
        android:layout_marginTop="36dp"
        android:ems="10"
        android:hint="Datum des Ereignisses"
        android:inputType="date"
        android:textColor="@color/black" />

    <EditText
        android:id="@+id/eetGenaueres"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/eetDatum"
        android:layout_marginTop="67dp"
        android:ems="10"
        android:hint="Genaueres zum Ereignis"
        android:inputType="textMultiLine"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/btEreignis"
        style="@style/darkbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="25dp"
        android:text="Speichern" />

有什么问题?

3 个答案:

答案 0 :(得分:4)

声明EditText时,

  

EditText ename =(EditText)findViewById(R.id.eetName);

默认情况下为空,您当时正在访问它的文本值。这是错误的。

您需要进行如下更改,

    final EditText ename = (EditText) findViewById(R.id.eetName);
    final EditText ezeit = (EditText) findViewById(R.id.eetDatum);
    final EditText egenaueres = (EditText) findViewById(R.id.eetGenaueres);
    Button bSave = (Button) findViewById(R.id.btEreignis);
    System.out.println("sdssssssssssssssssss" + name + zeit + genaueres);

    bSave.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            String name = ename.getText().toString();
            String zeit = ezeit.getText().toString();
            String genaueres = egenaueres.getText().toString();
            try
            {
                db.insertereignis(name, zeit, genaueres);
            }
            catch(Exception e){
                System.out.println("Insert des Ereignisses fehlgeschlagen!");
            }
        }
    });
}

您需要在onClickListener()方法中获取EditText的值。

答案 1 :(得分:3)

public class MainActivity extends Activity
{   
      EditText ename,ezeit,egenaueres;
      Button bSave;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
           ename = (EditText) findViewById(R.id.eetName);
            ezeit = (EditText) findViewById(R.id.eetDatum);
            egenaueres = (EditText) findViewById(R.id.eetGenaueres);
             bSave = (Button) findViewById(R.id.btEreignis);
         bSave.setOnClickListener(new OnClickListener()
         {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                final String genaueres = egenaueres.getText().toString();
                Log.e(genaueres.toString(), "genaueres");
                final String name = ename.getText().toString();
                Log.e(name.toString(), "name");
                final String zeit = ezeit.getText().toString();
                Log.e(zeit.toString(), "zeit");
                System.out.println("sdssssssssssssssssss" + name + zeit + genaueres);
                try{
                    db.insertereignis(name, zeit, genaueres);
                }
                catch(Exception e){
                    System.out.println("Insert des Ereignisses fehlgeschlagen!");
                }
            }

         });


    }
}

试试这段代码。

答案 2 :(得分:0)

这是一种最简单,最易于使用的方式。

全局(班级)变量声明。

EditText ename,ezeit,egenaueres;
Button bSave;
public static String name = null,zeit = null,genaueres = null;

onCreate()方法中。

ename = (EditText) findViewById(R.id.eetName);
ezeit = (EditText) findViewById(R.id.eetDatum);
egenaueres = (EditText) findViewById(R.id.eetGenaueres);
bSave = (Button) findViewById(R.id.btEreignis);

bSave.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) 
    {
        try
        {
            name = ename.getText().toString();
            zeit = ezeit.getText().toString();
            genaueres = egenaueres.getText().toString();
            System.out.println("==================\nName : " + name +"\nZeit : "+ zeit +"\nGenaueres : "+ genaueres +"\n"==================);

            db.insertereignis(name, zeit, genaueres);
        }
        catch(Exception e){
            e.printStackTrace();
        }catch(NullPointerException npe){
            npe.printStackTrace();
        }
    }
});

有一种方法可以使用代码。