Получение только строки из JSON API в JAVA на студии Android - PullRequest
0 голосов
/ 27 мая 2018

В этой ссылке: https://uhunt.onlinejudge.org/api/uname2uid/felix_halim этот API-интерфейс возвращает только строку!

, например:

339

Я пробовал таким образом, но это не работает:

String link = "https://uhunt.onlinejudge.org/api/uname2uid/felix_halim"; // getting userID
        Log.d("tttt", link);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, link, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    String inline = response.toString();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                    Log.d("tttt", "error");
                }
        });

Еще одна вещь, которую я использую на Android Studio 3.1 и использую библиотеку "'com.android.volley: volley: 1.1.0'"

Пожалуйста, помогите мне!Любая помощь будет оценена.Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Не знаю, правильна ли ваша конечная точка службы, но она возвращает 339. Это ясно означает, что ваша служба api не возвращает строку json.Ваш первый приоритет должен быть для получения правильной конечной точки.Если у вас есть правильная конечная точка, пожалуйста, следуйте приведенным ниже шагам, чтобы получить объекты Java из строки json.

Например, у вас есть следующая строка json, которую вы хотите преобразовать в объект Java:

{"firstname":"Ashwani","lastname":"Kumar","age":"30"}

Добавьте зависимости парсера Джексона, которые будут включены в файл Gradle.

compile 'com.fasterxml.jackson.core:jackson-databind:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-core:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.5'

Исключите META-INF / LICENSE в теге android в файле Gradle, чтобы избежать ошибки в файле с двойной лицензией в Android studio

packagingOptions {
    exclude 'META-INF/LICENSE'
}

Создайте модель для разбора вашей строки json.используйте следующую службу для автоматического создания моделей: http://www.jsonschema2pojo.org/

Вставьте строку json в и выберите JSON в качестве типа источника.нажмите кнопку предварительного просмотра или загрузки, чтобы получить сгенерированные классы Java.В этом случае мы получаем следующий класс java:

package com.example;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"firstname",
"lastname",
"age"
})
public class Person {

@JsonProperty("firstname")
private String firstname;
@JsonProperty("lastname")
private String lastname;
@JsonProperty("age")
private String age;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("firstname")
public String getFirstname() {
return firstname;
}

@JsonProperty("firstname")
public void setFirstname(String firstname) {
this.firstname = firstname;
}

@JsonProperty("lastname")
public String getLastname() {
return lastname;
}

@JsonProperty("lastname")
public void setLastname(String lastname) {
this.lastname = lastname;
}

@JsonProperty("age")
public String getAge() {
return age;
}

@JsonProperty("age")
public void setAge(String age) {
this.age = age;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}

Анализ строки json для объекта java, используя следующий код:

//Example Json String
String personJsonStr = "{\"firstname\":\"Ashwani\",\"lastname\":\"Kumar\",\"age\":\"30\"}";
//Pass the jason string and model class you want to convert you json string into
Person person = mapper.readValue(personJsonStr, Person.class);                               
// read from json string
String firstName = person.getFirstname();
String lastName = person.getLastname();
String age = person.getAge();
0 голосов
/ 27 мая 2018

Быстро изучил API, и похоже, что конечная точка, к которой вы обращаетесь, содержит только строку «339» (откройте ссылку в вашем браузере).

Отправка запроса GET на эту конечную точку через ПочтальонREST Client также выдает 339, показывая, что это действительно проблема на стороне сервера.

Другие конечные точки имеют свои ответы в формате JSON.Попробуйте другую конечную точку, например: https://uhunt.onlinejudge.org/api/contests/id/10, и вы увидите, что у вас есть действительный объект JSONObject.

Исправьте проблему в бэкэнде, чтобы отображать данные в JSON для этой конечной точки, и ваш ответ на внешнем интерфейсе должен отражатьто же самое.

...