java无法从Edittext保存文本
你好,我已经试了几个小时了,我想放弃。为了解决这个问题,我们访问了很多教程和在线网站。我试图将文本从Edittext字段存储到变量,但我没有任何运气。这是我的xml和java代码
<EditText
安卓:id="@+id/emailTxt"
安卓:layout_width="fill_parent"
安卓:layout_height="wrap_content"
安卓:layout_alignLeft="@+id/uc_logo"
安卓:layout_alignParentLeft="true"
安卓:layout_below="@+id/uc_logo"
安卓:ems="10"
安卓:hint="@string/email_hint"
安卓:inputType="textEmailAddress"
安卓:textColorHint="#000000"
安卓:textStyle="italic" />
<EditText
安卓:id="@+id/passTxt"
安卓:layout_width="fill_parent"
安卓:layout_height="wrap_content"
安卓:layout_alignParentLeft="true"
安卓:layout_below="@+id/emailTxt"
安卓:layout_marginTop="14dp"
安卓:ems="10"
安卓:hint="@string/password_hint"
安卓:inputType="textPassword"
安卓:textColorHint="#000000"
安卓:textStyle="italic" />
代码:
public class MainActivity extends ActionBarActivity {
//variables
/*String login_test_name = "t";
String login_test_pass = "t";
EditText username , pass;*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE); //Remove action bar from screen
setContentView(R.layout.activity_main);
//get EditText field data by id name
/*username = (EditText)findViewById(R.id.emailTxt);
pass = (EditText)findViewById(R.id.passTxt);*/
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//code to change activity with BTN click (to register user)
public void registerUser(View v)
{
Intent i = new Intent(MainActivity.this, UserRegister.class );
startActivity(i);
}
// code to change activity (to order menu if username and pass are ture)
public void orderMenu(View v)
{
//variables
String login_test_name = "t";
String login_test_pass = "t";
EditText username , pass;
//get EditText field data by id name
username = (EditText)findViewById(R.id.emailTxt);
pass = (EditText)findViewById(R.id.passTxt);
String u = username.getText().toString(); // change EditText type to String type
String p = pass.getText().toString();
if (!u.equals(login_test_name) && !p.equals(login_test_pass))
{
Toast.makeText(this, "wrong username or password", Toast.LENGTH_SHORT).show();
Toast.makeText(this, u, Toast.LENGTH_SHORT).show();
Toast.makeText(this, p, Toast.LENGTH_SHORT).show();
Toast.makeText(this, login_test_name, Toast.LENGTH_SHORT).show();
Toast.makeText(this, login_test_pass, Toast.LENGTH_SHORT).show();
}
else
{
/*
* Intent i = new Intent(MainActivity.this, OrderMenu.class );
* startActivity(i);
*/
Toast.makeText(this, "logged in", Toast.LENGTH_SHORT).show();
}
}//end order menu method
# 1 楼答案
正如您在评论中提到的,android:onClick=“orderMenu”在xml格式的EditText中都被用于您试图从两个EditText视图中获取值的每次单击,这似乎不太好,Tyr这一次
代码:
如果需要在单击时获取值,请尝试添加一个按钮,然后添加click listener 例如:
# 2 楼答案
orderMenu(View)
似乎被设置为点击回调。如果这是有意的,那么应该在XML中添加一个按钮,并为其赋予属性android:onClick="orderMenu"
另外,请记住,您正在快速连续地显示几条
Toast
消息。这看起来并不像你希望的那么好,即使只是为了测试目的。我建议构建一个消息字符串,然后一次显示所有消息您不必使用
StringBuilder
,您可以根据需要创建字符串StringBuilder
正是我的选择编辑:从你对这个问题的评论中,我看到你确实有一个使用
android:onClick
属性的按钮。在布局的顶部,您需要添加属性xmlns:tools="http://schemas.android.com/tools"
和tools:context="< package >.ClassName"
。在本例中,包不需要是完全限定的包名。根据清单中设置的包名,它可以是相对路径名# 3 楼答案
删除了片段。xml和链接它的文本。java文件。这解决了我的问题