我的问题是我想每两小时验证数据库中是否有新数据,为此我创建了这个用户界面:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/speedAlert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:gravity="center"
android:hint="km/h"
android:inputType="number" />
<CheckBox
android:id="@+id/checkBoxSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnConfirmSpeed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Confirm" />
所以当用户输入edittext的值并选中复选框并通过单击按钮确认时,会创建一个警报,并且每隔两小时该警报就会启动一项服务:
btnConfirmSpeed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cal = Calendar.getInstance();
triggerAtTime = cal.getTimeInMillis()+ (1 * 30 * 60 * 1000); // starts in 30 minutes
repeat_alarm_every = (2 * 60 * 60 * 1000); // repeat every 2 hour
int _id = (int) System.currentTimeMillis();
Intent intent = new Intent(Alarm.this, NotificaSpeed.class);
//get the value of checkbox from sharedpreferences
boolean tgpref = pref.getBoolean("checkVitessePref", false);
String sp = speedAlert.getText().toString();
if(checkBoxSpeed.isChecked()){
if(sp.matches(""))
Toast.makeText(getApplicationContext(), "specify speed", Toast.LENGTH_SHORT).show();
else
{
editor = pref.edit();
editor.putBoolean("checkVitessePref", true); // value to store
editor.putInt("speedalarm", Integer.parseInt(speedAlert.getText().toString()));
editor.commit();
pintent = PendingIntent.getService(Alarm.this, _id, intent, 0);
alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime, repeat_alarm_every, pintent);
}
}else {
alarm.cancel(pintent);
editor.putBoolean("checkVitessePref", false); // value to store
editor.commit();
stopService(new Intent(Alarm.this,NotificaSpeed.class));
}
}
});
NotificaSpeed是服务:
public class NotificaSpeed extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
mNotificationManager = (NotificationManager) getSystemService(ns);
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new VerifySpeedCar().execute();
return super.onStartCommand(intent, flags, startId);
}
public void notification(int carsNumber, int speed){
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(NotificaSpeed.this);
if(carsNumber != 0)
notificationBuilder.setContentTitle(carsNumber+" cars are exceeding the speed");
.setSmallIcon(R.drawable.ic_launcher)
.setAutoCancel(true);
final int _idI = (int) System.currentTimeMillis();
Intent notificationIntent = new Intent(NotificaSpeed.this, ListCars.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, _idI, notificationIntent, 0);
notificationBuilder.setContentIntent(contentIntent);
notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
mNotificationManager.notify(SIMPLE_NOTIFICATION_ID, notificationBuilder.build());
}
class VerifySpeedCar extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(TAG_ACCOUNTID, accountID));
params.add(new BasicNameValuePair(TAG_SPEEDKPH, ""+speedpref)); // how can I get the value of edittext of the speed from the sharedpreferences?
JSONObject json = jParser.makeHttpRequest(url, "GET", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
cars = json.getJSONArray(TAG_CARS);
carsNumber = cars.length();
} else
carsNumber = 0;
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
protected void onPostExecute(String file_url) {
if( carsNumber != 0){
notification(carsNumber, speedpref);
}
}}}
首先是进行验证的好方法还是我做错了? 第二,如何从共享偏好中获取edittext的值? 最后,当我关闭应用程序时,服务也会停止运行,所以当我再次启动应用程序时,服务不再运行,但复选框的值仍然被检查,我该如何解决?
感谢您抽出宝贵时间阅读我的问题。任何帮助将不胜感激
答案 0 :(得分:1)
如何从SharedPreference获取edittext的值?
创建SharedPreference和SharedPreference.Editor对象。
SharedPreferences sp ;
sp = this.getSharedPreferences("YOUR PREF NAME", 0);
我相信你从String str中获取edittext的值,如
str = ed.getText().toString();
SharedPreferences.Editor editor = sp.edit();
editor.putString("edit_text", str);
editor.commit();
从SharedPreference
中检索edittext值如果您要在同一活动中检索
String value = sp.getString("edit_text", null);
如果在不同的活动中,则首先像这样实例化SharedPreference
SharedPreference sp = this.getSharedPreferences("YOUR PREF NAME", 0);