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

Java 响应409,共享首选项管理器,java,android,Java,Android,我有个问题。如果我的设备在服务器中注册,服务器将生成409响应。因此,当我将设备注册到服务器时,我将服务器生成的ID响应保存在共享首选项管理器中。但由于某些原因,该ID没有存储在共享首选项管理器中。我是android开发新手,现在不知道该怎么办。请帮我解决这个问题 共享首选项管理器 public class SharedPrefManager { private static final String SHARED_PREF_NAME = "fcmsharedprefdemo";

我有个问题。如果我的设备在服务器中注册,服务器将生成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);
    }

}
这是我的共享首选项管理器,我正在添加主要活动

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());
}
public类MainActivity扩展了AppCompatActivity{
公共静态字符串deviceId=“”;
公共静态语境;
公众股基金经理股;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
context=getApplicationContext();
sharedInst=SharedPrefManager.getInstance(上下文);
setContentView(R.layout.activity_main);
IMEI\u NUMBER=Settings.Secure.getString(getApplicationContext().getContentResolver(),Settings.Secure.ANDROID);
if(sharedInst.getDeviceId()==null){
HashMap params=新的HashMap();
参数put(“名称”,IMEI_编号);
JsonObjectRequest req=新的JsonObjectRequest(服务器url,新的JSONObject(参数),
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
字符串s=“id”;
试一试{
deviceId=response.getString;
共享存储设备ID(设备ID);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
e(“Error:,Error.getMessage());
}
}
);
ApplicationController.getInstance().addToRequestQueue(req);
}
Log.d(“deviceID:,sharedInst.getDeviceId());
}
共享首选项管理器仅存储设备ID和get devicesID,还存储fcm令牌和get fcm令牌

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


还有谁能告诉我如何处理像409这样的响应,我希望我的程序在得到这些响应的情况下运行。

我意识到了问题所在!问题在于截击。我向队列中添加了3个请求,第二个和第三个请求在第一个请求发出后完成。但问题是第二个和第三个请求ird请求取决于第一个请求响应。这就是为什么我的程序停止并给我一个错误

有人能帮我在收到响应后如何发送截击请求吗?现在每个请求都被添加到队列中,但我需要的是在收到第一个请求的响应后发送下两个请求

这是我的截击管理代码

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);
    }
    }

}
公共类应用程序控制器扩展应用程序{
公共静态最终字符串标记=“截击模式”;
私有请求队列mRequestQueue;
专用静态应用程序控制器;
@凌驾
public void onCreate(){
super.onCreate();
sInstance=这个;
}
公共静态同步应用程序控制器getInstance(){
回归承诺;
}
公共请求队列getRequestQueue(){
if(mRequestQueue==null){
mRequestQueue=Volley.newRequestQueue(getApplicationContext());
}
返回mrequest队列;
}
公共无效addToRequestQueue(请求请求,字符串标记){
请求setTag(TextUtils.isEmpty(tag)?tag:tag;
d(“将请求添加到队列:%s”,req.getUrl());
getRequestQueue().add(请求);
}
公共无效addToRequestQueue(请求请求){
//如果标记为空,则设置默认标记
要求设置标签(标签);
getRequestQueue().add(请求);
}
公共作废取消挂起请求(对象标记){
if(mRequestQueue!=null){
mRequestQueue.cancelAll(标记);
}
}
}

请告诉我怎么做。

欢迎使用stack overflow!哇,代码太多了。如果包含复制错误所需的最小代码量,您就更有可能得到答案。如果可能,请立即帮助我,为什么设备ID没有存储。它提供空值