-1

我有一个代表 ID 号的 EditText 字段。该字段可以通过编程方式填充,使用基于刷卡结果的 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);
}
4

1 回答 1

-1

布局仅在循环的 onCreate 阶段更新。当调用 onResume 事件时会触发此事件,这解释了为什么在您锁定和解锁设备后字段会更新。有一些解决方法,例如进行更多的后台处理,然后创建具有正确值的新视图,或者使用允许在程序处于正常执行周期时进行绘图的表面视图。

对于我的应用程序,我要么进行后台处理,然后移至新视图,要么拥有一个不断调用自身以使 onCreate 事件再次触发的视图。解决方案取决于应用程序,但这就是问题发生的原因。

于 2013-05-17T20:57:14.677 回答