您好我已经尝试了几个小时,我想放弃。去过这么多教程和在线网站试图解决这个问题。我试图将文本从Edittext字段存储到变量,但我没有运气。这是我的xml和java代码
<EditText
android:id="@+id/emailTxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/uc_logo"
android:layout_alignParentLeft="true"
android:layout_below="@+id/uc_logo"
android:ems="10"
android:hint="@string/email_hint"
android:inputType="textEmailAddress"
android:textColorHint="#000000"
android:textStyle="italic" />
<EditText
android:id="@+id/passTxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/emailTxt"
android:layout_marginTop="14dp"
android:ems="10"
android:hint="@string/password_hint"
android:inputType="textPassword"
android:textColorHint="#000000"
android: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
答案 0 :(得分:0)
orderMenu(View)
似乎设置为点击回拨。如果这是故意的,您应该为XML添加一个按钮,并为其指定属性android:onClick="orderMenu"
此外,无关紧要,请记住,您正在快速连续显示多条Toast
条消息。这看起来并不像你希望的那样好,即使它仅用于测试目的。我建议构建一个消息字符串,然后立即显示它。
if (!u.equals(login_test_name) && !p.equals(login_test_pass))
{
StringBuilder errorMessage = new StringBuilder();
errorMessage.append("wrong username or password\n");
errorMessage.append(u + "\n");
errorMessage.append(p + "\n");
errorMessage.append(login_test_name + "\n");
errorMessage.append(login_test_pass + "\n");
Toast.makeText(this, errorMessage.toString(), Toast.LENGTH_LONG).show();
}
您不必使用StringBuilder
,您可以根据需要制作字符串。 StringBuilder
只是我的选择。
编辑:根据您对该问题的评论,我发现您确实有一个使用android:onClick
属性的按钮。在布局的顶部,您需要添加属性xmlns:tools="http://schemas.android.com/tools"
和tools:context="< package >.ClassName"
。在这种情况下,包不需要是完全限定的包名。它可以是相对路径名,基于清单中设置的包名称。
答案 1 :(得分:0)
正如你在评论中提到的,android:onClick =“orderMenu”在xml的EditText中用于你试图从两个EditText视图中获取值的每个点击,看起来不太好,Tyr这一次。
<EditText
android:id="@+id/email_txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/uc_logo"
android:layout_alignParentLeft="true"
android:layout_below="@+id/uc_logo"
android:ems="10"
android:hint="@string/email_hint"
android:inputType="textEmailAddress"
android:textColorHint="#000000"
android:textStyle="italic" />
<EditText
android:id="@+id/pass_txt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/email_txt"
android:layout_marginTop="14dp"
android:ems="10"
android:hint="@string/password_hint"
android:inputType="textPassword"
android:textColorHint="#000000"
android:textStyle="italic" />
代码:
username = (EditText)findViewById(R.id.emailTxt);
pass = (EditText)findViewById(R.id.passTxt);
String u = username.getText().toString();
String p = pass.getText().toString();
如果您在单击时需要获取值,请尝试添加一个按钮并为其添加单击侦听器 例如:
Button btn = (Button)findViewByid(R.id.click_btn);
btn.setOnClickListener(new onClickListener{
username = (EditText)findViewById(R.id.emailTxt);
pass = (EditText)findViewById(R.id.passTxt);
String u = username.getText().toString();
String p = pass.getText().toString();
});
答案 2 :(得分:0)
删除了._ava文件中的fragment_main.xml和链接它的文本。这解决了我的问题