字符串不接受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" />

问题出在哪里?

当您声明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的值。

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!");
                }
            }
         });

    }
}

试试这个代码。

这是一种最简单且格式化的使用方式。

全局(类级别(变量声明。

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();
        }
    }
});

有一种使用代码的方法。

最新更新