当我退出当前用户然后重新登录时,Parse上传的值将变为0

时间:2015-12-09 04:55:42

标签: android

这是应用的简单设置页面。当我单击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) {

            }
        });


    }
}
}

1 个答案:

答案 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(),具体取决于您的实际需求......)