0

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

        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.println,和为空name,但我不明白为什么。zeitgenaueres

这是我的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" />

问题是什么?

4

3 回答 3

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 的值。

于 2013-05-07T09:16:45.827 回答
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!");
                }
            }

         });


    }
}

试试这个代码。

于 2013-05-07T09:29:16.137 回答
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();
        }
    }
});

有一种使用代码的方法。

于 2013-05-07T12:38:00.563 回答