这是应用的简单设置页面。当我单击applyButton时,它将获取当前的搜索条进度值并将其上传到云端。它完全正常,因为当我离开设置页面然后返回时,值被保存。但是,当我退出当前用户然后重新登录并转到设置页面时,由于某种原因,从云中提取的值为0。
在我的代码底部附近,我有一个名为userIsLoggedIn()
的方法。我有如下日志声明:
Log.d(TAG, "got user settings from database");
Log.d(TAG, "desired work time: " + workFromDatabase);
Log.d(TAG, "desired rest time " + restFromDatabase);
也许我不知道某些东西,因为我从云中检索的布尔值非常好。只有int值才能解决这个问题。
public class SettingsScreen extends AppCompatActivity {
public static final String TAG = SettingsScreen.class.getSimpleName();
private static final String ACCESSEDSETTINGS = "accessed_settings";
@Bind(R.id.workText)
TextView workText;
@Bind(R.id.restText)
TextView restText;
@Bind(R.id.workSeekBar)
SeekBar workBar;
@Bind(R.id.restSeekBar)
SeekBar restBar;
@Bind(R.id.applyButton)
Button applyButton;
public static final int MAX_WORK = 60;
public static final int MIN_WORK = 5;
public static final int MAX_REST = 60;
public static final int MIN_REST = 1;
public static final String WORK = "work"; //these two will be the data uploaded to the database
public static final String REST = "rest";
public static final String LOCALWORK = "localwork"; //these two will be data sent back to main activity. only locally saved
public static final String LOCALREST = "localrest";
int workFromDatabase;
int restFromDatabase;
Boolean databaseHasValue = false;
private int mDesiredWorkTime;
private int mDesiredRestTime;
private ParseUser mUser;
Boolean isLoggedIn;
Boolean registeredUserAccessedSettings = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings_screen);
ButterKnife.bind(this);
Intent intent = getIntent();
isLoggedIn = intent.getBooleanExtra("currentUser", false);
if (isLoggedIn) {
userIsLoggedIn();
Log.d(TAG, "Database has value? " + databaseHasValue);
} else {
workBar.setMax(MAX_WORK - MIN_WORK);
workBar.setProgress(25 - MIN_WORK);
workBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mDesiredWorkTime = MIN_WORK + progress;
workText.setText("Current: " + mDesiredWorkTime + " minutes");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
restBar.setMax(MAX_REST - MIN_REST);
restBar.setProgress(5 - MIN_REST);
restBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mDesiredRestTime = MIN_REST + progress;
restText.setText("Current: " + mDesiredRestTime + " minutes");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
applyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isLoggedIn) {
mUser.put(WORK, mDesiredWorkTime);
mUser.put(REST, mDesiredRestTime);
mUser.put(ACCESSEDSETTINGS, true); //when user clicks apply, ACCESSEDSETTINGS will be true and so the if statement in the method below wont run
Log.d(TAG, "putting desired user settings into database");
Log.d(TAG, "desired work time: " + mDesiredWorkTime);
Log.d(TAG, "desired rest time " + mDesiredRestTime);
}
Intent intent = new Intent(SettingsScreen.this, MainActivity.class);
intent.putExtra(LOCALWORK, mDesiredWorkTime);
intent.putExtra(LOCALREST, mDesiredRestTime);
startActivity(intent);
}
});
}
public void userIsLoggedIn() {
if (isLoggedIn) {
mUser = ParseUser.getCurrentUser();
registeredUserAccessedSettings = mUser.getBoolean(ACCESSEDSETTINGS);
Log.d(TAG, "Has user accessed settings before? " + registeredUserAccessedSettings);
if (!registeredUserAccessedSettings) { //this code will run first time user accesses settings with parse
workFromDatabase = 25;
restFromDatabase = 5;
Log.d(TAG, "launched settings with account for first time");
} else {
workFromDatabase = mUser.getInt(WORK);
restFromDatabase = mUser.getInt(REST);
workText.setText("Current: " + workFromDatabase + " minutes");
restText.setText("Current: " + restFromDatabase + " minutes");
databaseHasValue = true;
Log.d(TAG, "got user settings from database");
Log.d(TAG, "desired work time: " + workFromDatabase);
Log.d(TAG, "desired rest time " + restFromDatabase);
}
workBar.setMax(MAX_WORK - MIN_WORK);
workBar.setProgress(workFromDatabase - MIN_WORK);
workBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mDesiredWorkTime = MIN_WORK + progress;
workText.setText("Current: " + mDesiredWorkTime + " minutes");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
restBar.setMax(MAX_REST - MIN_REST);
restBar.setProgress(restFromDatabase - MIN_REST);
restBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mDesiredRestTime = MIN_REST + progress;
restText.setText("Current: " + mDesiredRestTime + " minutes");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}
}
答案 0 :(得分:0)
这个问题非常简单。您没有" 将其上传到云端",您只是在本地 {{1}上设置这些值对象。
例如:
public class AppoitmentPeople extends ListFragment {
private View view;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getAppoitment(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.appoitment_people, container, false);
return view;
}
public void getAppoitment(Context mContext){
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("access_token", URLManager.ACCESS_TOKEN);
params.put("start_page", 0+"");
params.put("type", "2");
client.post(URLManager.GET_SELLERLIST, params,
new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String content) {
try {
Response<List<AppointMent>> result=JsonUtil.deserialize(content, new TypeReference<Response<List<AppointMent>>>() {
});
List<AppointMent> list=result.getData();
AppointAdapter adapter=new AppointAdapter(getActivity(),list);
setListAdapter(adapter);
} catch (Exception e) {
Log.e("AppPeople", e.getMessage());
}
}
});
}
不将任何内容保存到远程数据库。它只是将ParseUser
键指示的字段设置为本地 mUser.put(WORK, mDesiredWorkTime);
对象中存储在WORK
中的值。
要解决您的问题,请更改此信息:
mDesiredWorkTime
到此:
ParseUser
(而不是saveInBackground()
您还可以使用saveInBackground(SaveCallback callback)
或save()
,具体取决于您的实际需求......)