我正在尝试通过共享的首选项将数据从Service类传递到Fragment类。
我没有遇到语法错误,但是有一个逻辑错误,因为我没有在StepsFragment中使用所需的更新的步骤计数器来更新文本视图。
我正在StepsService.java
中运行一个计步器,并且试图将信息传递给StepsFragment.java
。
我尝试了以下解决方案:
Access shared preference from a service
Can I get data from shared preferences inside a service?
这是我在StepsService.java
中的代码
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true){
// ------- code for task to run
SharedPreferences.Editor editor = getSharedPreferences("DeviceToken",MODE_PRIVATE).edit();
editor.putString("DeviceToken",String.valueOf(stepsCounter));
editor.apply();
addNotification(String.valueOf(stepsCounter));
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
return START_NOT_STICKY;
}
这是我在StepsFragment.java
中的代码
public void startService(View view) {
Intent serviceIntent = new Intent(getActivity(),StepsService.class);
getActivity().startService(serviceIntent);
SharedPreferences prefs = this.getActivity().getSharedPreferences("DeviceToken", MODE_PRIVATE);
String deviceToken = prefs.getString("DeviceToken", null);
tv_steps.setText(deviceToken);
}
答案 0 :(得分:0)
在您的Fragment
中,您致电startService()
,此后立即阅读SharedPreferences
。这行不通。对startService()
的调用是异步的。它基本上只是要求Android启动Service
。这将在将来的某个时间发生,但绝对不会立即发生。
Service
的启动和SharedPreferences
的更新将需要一些时间。
当Service
更新Intent
时,您可以让SharedPreferences
发送广播Fragment
,并且您的Activity
或Intent
可以注册接收此广播的通知View
,并以此作为触发来更新SharedPreferences
。
或者您可以等待一些时间再检查df.columns = df.columns.str.replace('i', "")
header 1.0 header 1.1
header 2.0 header 2.1
0
1
2
3
。