我有一个EditText字段,表示一个ID号。该字段可以通过编程方式填充,使用IDField.setText(String)基于刷卡的结果,也可以使用键盘手动填充。
填写文本后,两种方法(自动登录 - 基于滑动或手动 - 基于按钮单击)都运行相同的登录脚本。但是,当我去抓取EditText字段的内容时,如果我手动编辑文本,我会返回一个空字符串。如果文本是以编程方式设置的,那么它可以完美地运行
这对我没有任何意义。 editText.getText()。toString()是否有理由不返回文本框中可见的内容?
XML:
<Button
android:id="@+id/btn_swipeCard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/signInID"
android:layout_toLeftOf="@+id/textView1"
android:onClick="SignInStudent"
android:text="Swipe ID" />
按钮初始化:
IDField = (EditText) layout.findViewById (R.id.signInID);
LoginButton = (Button) findViewById(R.id.button1);
LoginButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { SignInStudent(); } } );
刷卡:
// displays data from card swiping
private Runnable doUpdateTVS = new Runnable()
{
public void run()
{
try
{
//Grab ID Number
String[] splitMSG = strMsrData.split("=");
//txtIDNumber.setText(splitMSG[2]);
IDField.setText(splitMSG[2]);
StringBuffer hexString = new StringBuffer();
hexString.append("<");
String fix = null;
for (int i = 0; i < msrData.length; i++) {
fix = Integer.toHexString(0xFF & msrData[i]);
if(fix.length()==1)
fix = "0"+fix;
hexString.append(fix);
if((i+1)%4==0&&i!=(msrData.length-1))
hexString.append(' ');
}
hexString.append(">");
myUniMagReader.WriteLogIntoFile(hexString.toString());
SignInStudent();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
};
登录逻辑:
public void SignInStudent()
{
String temp = "http://wwww.tempUrl.com/signIn?ID="+ IDField.getText().toString() + "&DeviceId="+KEY;
webView.loadUrl(temp);
}
答案 0 :(得分:-1)
布局仅在循环的onCreate阶段更新。调用onResume事件时会触发此事件,这解释了锁定和解锁设备后字段更新的原因。这有一些解决方法,例如进行更多后台处理,然后使用正确的值创建新视图,或者使用允许在程序处于正常执行周期时进行绘图的surfaceView。
对于我的应用程序,我要么进行后台处理,然后移动到新视图,要么有一个视图,只是一直调用自己来重新触发onCreate事件。解决方案取决于应用程序,但这就是问题发生的原因。