يقوم التحديث التحديثي بإرجاع كائن يحتوي على أعضاء فارغة

StackOverflow https://stackoverflow.com//questions/23001765

  •  20-12-2019
  •  | 
  •  

سؤال

عندما أحاول تحليل JSON التالي باستخدام التعديل التحديثي، ينتهي بي الأمر بكائنات أعضاء فارغة.

تفسير:

RestAdapter restAdapter = new RestAdapter.Builder()
        .setEndpoint(CallerInfo.API_URL)
        .setLogLevel(RestAdapter.LogLevel.FULL)
        .build();
InGameInfo igi = restAdapter.create(InGameInfo.class);
Game game = igi.fetchInGameInfo("EUW", "sasquatching");
Log.d("Cancantest", "Game " + game); //Not null
Log.d("Cancantest", "Team one " + game.getTeamOne()); //Null

فئة اللعبة:

@SerializedName("teamTwo")
@Expose private Team teamTwo;
@SerializedName("teamOne")
@Expose private Team teamOne;

public void setTeamOne(Team teamOne) {
    this.teamOne = teamOne;
}

public void setTeamTwo(Team teamTwo) {
    this.teamTwo = teamTwo;
}

public Team getTeamOne() {
    return teamOne;
}

public Team getTeamTwo() {
    return teamTwo;
}

فئة الفريق:

@SerializedName("array")
@Expose private TeamMember[] teamMembers;

public void setTeamMembers(TeamMember[] teamMembers) {
    this.teamMembers = teamMembers;
}

public TeamMember[] getTeamMembers() {
    return teamMembers;
}

مثال جسون:

{
   "game":{
      "teamTwo":{
         "array":[]
      },
      "teamOne":{
         "array":[]
      }
   }
}
هل كانت مفيدة؟

المحلول

يحتوي JSON على إدخال "لعبة" عالي المستوى، لذا لا يمكنك إلغاء تسلسل مثيل اللعبة مباشرةً.أنت بحاجة إلى نوع آخر يحتوي على حقل من النوع Game الذي يمثل الرد

public class Response {
    public final Game game;

    public Response(Game game) {
        this.game = game;
    }
}

يمكنك وضع JSON الخاص بك في سلسلة واستخدام Gson مباشرة لاختبار كيفية إلغاء تسلسل الاستجابة.هذا السلوك ليس له أي علاقة تقريبًا بالتحديث التحديثي وكله يتعلق بسلوك جيسون.

String data = "...";
Game game = gson.fromJson(data, Game.class);
Response response = gson.fromJson(data, Response.class);

نصائح أخرى

يمكن أن يكون هناك سبب آخر لسلوك مماثل إلى حد ما:في هذه الحالة، لا يحتوي مصحح الأخطاء فعليًا على أعضاء ميدانيين للاستجابة التي تم إرجاعها من التعديل التحديثي.

والسبب في ذلك هو proguard.إذا كنت تستخدم minifyEnabled true, ، تأكد من إخباره صراحةً بالاحتفاظ بـ POJOs الخاصة بك.يمكن أن يكون شيء من هذا القبيل:

#save model classes
-keep class com.example.app.**.model.** {*; }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top