我可以在Android服务中使用共享首选项吗?

时间:2016-03-15 00:33:50

标签: android android-studio notifications android-service sharedpreferences

我有一个Android应用程序,其中包含一些Android后台服务,它在设备启动后无需运行应用程序即可运行,并且该服务会向用户发送通知。我需要有关上次登录应用程序的详细信息(最后输入的用户名和密码)以使用服务代码。

顺便说一句,我在登录页面中使用共享首选项来存储最后登录人员的用户名和密码,因此我可以使用这些共享首选项从应用程序中获取用户名和密码没有运行?

我试过这样做,这是我的Android服务代码......

    saveLog = loginPref.getBoolean("saveLog", false);
    String userName = "";
    String passWord = "";

    if (saveLog == true) {
        userName =loginPref.getString("username", "");
        passWord =loginPref.getString("password", "");
    }

以下是登录活动代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    log = (Button) findViewById(R.id.butLogin);
    log.setOnClickListener(this);
    loginPref = getSharedPreferences("loginPref", MODE_PRIVATE);
    loginPrefEditor = loginPref.edit();
    editUsername = (EditText) findViewById(R.id.userEB);
    editPassword = (EditText) findViewById(R.id.passEB);
    saveCheckBox = (CheckBox) findViewById(R.id.saveCB);

    saveLog = loginPref.getBoolean("saveLog", false);

    if (saveLog == true) {
        editUsername.setText(loginPref.getString("username", ""));
        editPassword.setText(loginPref.getString("password", ""));
        saveCheckBox.setChecked(true);
    }
}

在这里,我存储了登录活动

中这些共享首选项的值
        if (saveCheckBox.isChecked()) {
            loginPrefEditor.putBoolean("saveLog", true);
            loginPrefEditor.putString("username", username);
            loginPrefEditor.putString("password", password);
            loginPrefEditor.commit();
        } else {
            loginPrefEditor.clear();
            loginPrefEditor.commit();
        } 

1 个答案:

答案 0 :(得分:1)

当然你可以这样做,我的工作代码在这里:

/**
 * Function to set taxonomy term names based on term references for given entity.
 */
function MYMODULE_refresh_property_characteristics(&$entity, $save = FALSE) {
  try {
    $w_node = entity_metadata_wrapper('node', $entity);
    $collections = array();
    foreach ($w_node->field_rs_property_features->getIterator() as $delta => $term_wrapper) {
      if ($term_wrapper->parent->count() > 0) {
        $name = $term_wrapper->name->value();
        $pname = $term_wrapper->parent->get(0)->name->value();
        if (array_key_exists($pname, $collections)) {
          $collections[$pname]->field_feed_characteristics_value[] = $name;
        } else {
          // Create the collection entity, set field values and set it's "host".
          $field_collection_item = entity_create('field_collection_item', array('field_name' => 'field_feed_characteristics'));
          $field_collection_item->setHostEntity('node', $w_node->value());
          $collections[$pname] = entity_metadata_wrapper('field_collection_item', $field_collection_item);
          $collections[$pname]->field_feed_characteristics_title = $pname;
          $collections[$pname]->field_feed_characteristics_value = array($name);
        }
      }
    }
    if ($save) {
      $w_node->save();
    }
  } catch (Exception $e) {
    drupal_set_message(t('Error setting values for field collection: @title, message: @error.',
          array('@title' => $w_node->title->value(), '@error' => $e->getMessage())), 'error');
    watchdog_exception('MYMODULE', $e);
    return FALSE;
  }
  return TRUE;
}

你可以把变量放到prefs,清除prefs等......无论你想要什么。

别忘了这一点:服务就像是活动,但它们是在后台运行的。