Android:bindService()阻止我访问EditTexts?

时间:2014-09-01 08:09:55

标签: java android service android-edittext

我在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的内容。老实说,我没有想法......任何人都知道如何妥善处理这个问题?

0 个答案:

没有答案