我在Android(4.4)中遇到这个奇怪的问题,如果(并且仅当)我之前启动了bindService,我无法通过getText().toString()
访问EditText字段的内容。
我将其缩小为以下代码:
布局(剥离到基本部分):
<EditText
android:id="@+id/edit_username" />
<Button
android:id="@+id/button"
android:text="@string/do sth"
android:onClick="myFunction" />
活动代码:
public class MyActivity extends Activity {
private EditText editUsername;
private MyService myService;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.act_login);
this.editUsername = (EditText) this.findViewById(R.id.edit_username);
Intent serviceIntent = new Intent(this, MyService.class);
bindService(serviceIntent, myServiceConnection, Context.BIND_AUTO_CREATE); // 1
}
public void myFunction(View view) {
Toast.makeText(this, editUsername.getText().toString(), Toast.LENGTH_SHORT).show(); // 2
Log.d(Config.LOGTAG, "user: " + editUsername.getText().toString());
}
private ServiceConnection myServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
ServiceBinder binder = (ServiceBinder) service;
myService = binder.getService();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
networkServiceIsBound = false;
}
};
MyService类不执行任何操作,只是实现所需的存根方法,如Android开发人员的教程中所示。
所以我的问题是:在代码中的标记“2”处,从EditText检索的内容为空,无论我在文本字段中输入什么。有趣的信息:如果我将一个字符串“硬编码”到布局中的EditText(例如android:text="blabla"
),则会显示。
无论如何 - 如果我不绑定服务(即删除标有“1”的行),整个设置工作完美:然后,我在文本字段中输入的所有内容都显示在Toast和Log中......
我想像这样绑定我的服务会以某种方式干扰访问EditText的内容。老实说,我没有想法......任何人都知道如何妥善处理这个问题?