通过HTTP传输首选项并检查结果

时间:2018-11-04 12:08:26

标签: java android

我已经测试了很多可能性,但是没有任何效果。我的情况:

我有一个复选框首选项。我想将此复选框的值保存在我的网站空间的数据库中。原则上,它可以正常工作。我的问题是检查是否成功传输到我的数据库。到目前为止,我已经使用HTTP请求(齐射)保存了该值。但是,当出现错误时,我想取消用户操作(分别撤消值更改)。我的尝试总是失败,因为HTTP请求是异步的。因此,用户操作已经完成。

希望您能为我提供解决此问题的方法。


编辑

我的尝试:

public boolean onPreferenceChange(Preference preference, Object newValue) {
            saveValueInCloud(preference, newValue);
            return false; 
}

public void saveValueInCloud(Preference preference, Object newValue){
    mRequestQueue = Volley.newRequestQueue(this);
    String url = "http://example.de";

    mStringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //Return to onPreferenceChange not possible
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            //Return to onPreferenceChange not possible
        }
    });

    mRequestQueue.add(mStringRequest);    
}

这只是一个例子。我的问题是我无法找到一种可行的解决方案。


EDIT2

我发现了我所有方法的问题。当http请求失败时,我使用首选项编辑器设置了首选项撤消:

SharedPreferences.Editor prefEditor = settings.edit();
prefEditor.putString("UserName", "John Doe");
prefEditor.putInt("UserAge", 22);
prefEditor.putString("Gender", "Male");
prefEditor.commit();

此后,不会刷新UI。编辑器设置一个值后,不会调用PreferenceChangedListener,因为ui中的值不会更改。

现在,我重新加载了Preference-XML,我的代码运行正常。

我希望这是可以理解的。

0 个答案:

没有答案