2017-02-03 8 views
0
  1. Ниже приведен JSON, из которого я пытался извлечь данные. Мне нужно
  2. вывести и отобразить имена и классы с использованием retrofit2. 3.I пробовал несколько сайтов, но только смог получить данные непосредственно из массива 4. Но не из массива объектов. Это будет сформировано этим кодом.Получение данных из самого внутреннего класса с использованием «Дооснащения». Помогите мне отобразить данные классов A и B

     { 
         "Class1" :{ 
           "A": [ 
          { 
           "name" : "paul", 
           "class" : "first" 
          } 
            ], 
           "B": [ 
          { 
           "name" : "anna", 
           "class" : "second" 
          } 
            ] 
          }, 
    
        "Class2" :{ 
           "A": [ 
            { 
            "name" : "matthew", 
            "class" : "first" 
             } 
            ], 
           "B": [ 
            { 
            "name" : "joe", 
            "class" : "second" 
            } 
            ] 
           } 
        } 
    

Можете ли вы сказать мне, почему я получаю в OnFailure() метод. Что случилось с моим кодом

 public class MainActivity extends AppCompatActivity { 

private ListView listView; 
private static final String Tag = "com.example"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView = (ListView)findViewById(R.id.bList); 

    OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

    String API_BASE_URL = "xyz.com"; 

    HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 

    logging.setLevel(HttpLoggingInterceptor.Level.BODY); 

    httpClient.addInterceptor(logging); 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(API_BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(httpClient.build()) 
      .build(); 



    ApiInterface client = retrofit.create(ApiInterface.class); 

    Call<List<Example>> call = client.getdate(); 


    call.enqueue(new Callback<List<Example>>() { 
     @Override 
     public void onFailure(Call<List<Example>> call, Throwable t) { 

      Toast.makeText(MainActivity.this, "ERROR", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onResponse(Call<List<Example>> call, Response<List<Example>> response) { 

      if (response.isSuccessful()) { 
       //Response success. Handle data here 
      } 
      else{ 
       //For getting error message 
       Log.d("Error message",response.message()); 
       //For getting error code. Code is integer value like 200,404 etc 
       Log.d("Error code",String.valueOf(response.code())); 
      } 

     } 
    }); 
} 

}

Пример мой основной класс

Ниже MyAPIInterface.java

public interface ApiInterface {public interface ApiInterface { 
      @GET("/sement") 
      Call<List<Example>> getdate(@Query("date")String date); 

       } 
+0

ваш формат JSON является недействительным –

+0

это право формат: { "Class1": { "A": [ { "имя": "Пол", "класс": "первый" } ], "В": [ { "название": "анна", "класс": "второй" } ] }, "класс 2": { "А": [ { "name": "matthew", "класс": "первый" } ], "B": [ { "имя": "Джо", "класс": "второй" } ] } } –

+0

Добро пожаловать в Stack Переполнение Preeti.Что касается вашего вопроса, сначала проверьте свой ответ JSON, который недействителен. Также вы должны реализовать класс модели в соответствии с вашим ответом json. – Piyush

ответ

2

Ваш JSON является недействительным. Но для вашего вопроса ответ Вам нужно создать модели с помощью http://www.jsonschema2pojo.org/ от JSON, а затем использовать библиотеку GSON для отображения данных json для моделей.

Смотрите эту ссылку, вы получите идею https://guides.codepath.com/android/Consuming-APIs-with-Retrofit

ИЛИ

Для приведенного выше примера, вы получите от имени & класса как

List<A> alist = mainclass.getClass1().getA(); 
for (int i = 0; i < alist.size(); i++) { 
     String name = alist.get(i).getName(); 
     String class = alist.get(i).getClass(); 
} 

И сделать то же самое для класса B

+0

Я не могу поделиться истинным JSON, поэтому я создал фиктивный JSON для справки. Я уже преобразовал все и создал модели. То, что я не могу сделать, - это как отобразить имя и класс –

+0

Просьба поделиться своим кодом –

+0

Ну, используя этот пример, вы можете получить имя и класс, например String name = mainclass.getClass1(). GetA(). Get (я) .getName(); String class = mainclass.getClass1(). GetA(). Get (i) .getClass(); –

0

Сначала подтвердите свой Json.

Используйте этот инструмент для Json к классу объектов http://www.jsonschema2pojo.org/

После создания объектов.

здесь getData() - первый json объект.

List<A> listA= response.body().getData().getClass1().getA(); 
List<B> listB=response.body().getData().getClass1().getB(); 

for(A list:listA) 
list.getname();  //paul 
list.getclass();  //first 

for(B list:listB) 
list.getname();  // anna 
list.getclass();  //second 



List<A> listA= response.body().getData().getClass2().getA(); 
List<B> listB=response.body().getData().getClass2).getB(); 

for(A list:listA) 
list.getname();   //matthew 
list.getclass();   //first 

for(B list:listB) 
list.getname();   //joe 
list.getclass();   //second 
+0

Класс 1 генерируется в форме ниже: jsonschema2pojo.org public Class1 getClass1() {return class1; } public void setClass1 (Class1 class1) {this.class1 = class1; } Таким образом, getClass1() сообщает об ошибке, что «нестатический метод нельзя ссылаться через статический контекст» –

+0

@Preeti 'getClass1()' - это метод экземпляра, то есть вам нужен экземпляр класса Class1, чтобы назови это. Вы пытаетесь называть его самим классом Class1. – Piyush