Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Доступ к классу приложения из службы

Автор вопроса: somedevОтветов: 1

Я читал, что для хранения значений в виде глобальных переменных можно использовать класс Application. Я намереваюсь взять имя пользователя и пароль из основного действия, сохранить их в переменных класса приложения и начать новое действие, а затем получить эти значения внутри службы, запущенной в новом действии, однако я получаю нулевые значения при использовании методов получения, которые я определил в моем классе приложений.

Класс моего приложения:

public class MyApp extends Application
{
  private String uid;
  private String upwd;

  @Override
  public void onCreate()
  {
      super.onCreate();
  }

  public void setUID(String value)
  {
      uid = value;
  }

  public void setPWD(String value)
  {
      upwd = value;
  }

  public String getUID()
  {
      return uid;
  }

  public String getPWD()
  {
      return upwd;
  }
}

В моей основной деятельности:

  public void setvalues()
  {
        unameval = Unametxtfield.getText().toString();
        pswrdval =  Pswrdtxtfield.getText().toString();
        ((MyApp)this.getApplicationContext()).setUID(unameval);
        ((MyApp)this.getApplicationContext()).setPWD(pswrdval);
  }

Мое второе действие внутри службы:

public void fetchvalues()
{
      String uname = ((MyApp).getApplicationContext()).getUID();
      String upswrd = ((MyApp).getApplicationContext()).getPWD();
}

Манифест Android:

<application
        android:name="MyApp"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

    <!-- A Service here -->
     <service
        android:name="Service1"
        android:process=":myapp_service1" >
    </service>


    <!-- A service in which I do the fetching of uname and pswd -->
     <service
        android:name="Service2"
        android:process=":myapp_Service2" >
     </service>

    <activity
        android:name=".Second_Activity"
        android:exported="false"
        android:label="@string/activityname" >
        <intent-filter>
            <action android:name="android.intent.action.DEFAULT" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:label="@string/Firstactivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

Примечание. Я где-то читал, что класс приложения не будет работать, когда вы используете его в нескольких процессах (что, я думаю, я делаю), это правда?

  • это правда. вы не можете использовать этот метод для нескольких процессов. njzk2 17.10.2012

androidglobal-variables

Ответы

Ответ 1 · Ragunath Jawahar

Используйте SharedPreferences или Одиночка.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы