gpt4 book ai didi

java - 响应 409,共享首选项管理器

转载 作者:行者123 更新时间:2023-11-29 02:36:39 25 4
gpt4 key购买 nike

我有一个问题。如果我的设备在服务器中注册,服务器会生成 409 响应。因此,当我将我的设备注册到服务器时,我将服务器生成的 ID 响应保存在共享首选项管理器中。但由于某种原因,ID 没有存储在共享首选项管理器中。我是 android 开发的新手,我现在不知道该怎么做。请帮我解决这个问题。

共享偏好管理器

public class SharedPrefManager {

private static final String SHARED_PREF_NAME = "fcmsharedprefdemo";

private static Context mCtx;
private static SharedPrefManager mInstance;

private SharedPrefManager(Context context){
mCtx = context;
}

public static synchronized SharedPrefManager getInstance(Context context){
if(mInstance == null)
mInstance = new SharedPrefManager(context);
return mInstance;
}


public boolean storeDeviceId(String deviceId){
SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(d_Id, deviceId);
editor.apply();
return true;
}
public String getDeviceId(){
SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
return sharedPreferences.getString(d_Id, null);
}

}

这是我的共享首选项管理器,我正在添加主要 Activity 。

public class MainActivity extends AppCompatActivity {
public static String deviceId = "";
public static Context context;
public SharedPrefManager sharedInst;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
context = getApplicationContext();
sharedInst = SharedPrefManager.getInstance(context);
setContentView(R.layout.activity_main);

IMEI_NUMBER = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);

if(sharedInst.getDeviceId() == null){
HashMap<String, String> params = new HashMap<String, String>();
params.put("name", IMEI_NUMBER);

JsonObjectRequest req = new JsonObjectRequest(server_url, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String s = "id";
try {
deviceId = response.getString(s);
sharedInst.storeDeviceId(deviceId);

} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
}
);
ApplicationController.getInstance().addToRequestQueue(req);
}
Log.d("deviceID:", sharedInst.getDeviceId());
}

Shared preference Manager 只存储设备的 ID 并获取 devicesID,它还存储 fcm token 并获取 fcm token 。

在我的代码中,我试图保存从服务器收到的作为响应的 deviceId。但我面临的问题是 deviceId 由于某种原因没有被存储。一些 android 大师可以帮助我解决这个问题,为什么 deviceId 没有被存储。我在这里遗漏了一些明显的东西吗?有什么我必须添加到代码中的吗?我是否没有正确生成实例,这就是未生成设备 ID 的原因。我可以看到对服务器的调用是正确的,并且服务器也在生成 deviceId。

也有人可以告诉我如何处理像 409 这样的响应,我希望我的程序在收到这些响应的情况下运行。

最佳答案

我意识到问题出在哪里了!问题出在 Volley 上。我正在向队列中添加 3 个请求,第二个和第三个请求在第一个请求发出后完成。但问题是第二个和第三个请求依赖于第一个请求响应。这就是为什么我的程序停止并给我一个错误。

有人可以帮我了解如何仅在收到响应后才发送请求吗?现在每个请求都被添加到队列中,但我需要的是在收到第一个请求的响应后发送下两个请求。

这是我的 volleyManager 代码

public class ApplicationController extends Application {

public static final String TAG = "VolleyPatterns";
private RequestQueue mRequestQueue;
private static ApplicationController sInstance;

@Override
public void onCreate() {
super.onCreate();
sInstance = this;
}


public static synchronized ApplicationController getInstance() {
return sInstance;
}


public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}

return mRequestQueue;
}

public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);

VolleyLog.d("Adding request to queue: %s", req.getUrl());

getRequestQueue().add(req);
}

public <T> void addToRequestQueue(Request<T> req) {
// set the default tag if tag is empty
req.setTag(TAG);

getRequestQueue().add(req);
}


public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}

}

请告诉我怎么做。

关于java - 响应 409,共享首选项管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com