0

我正在尝试使用免费字典 api 使用改造来制作在线字典,我是改造的新手。每当我运行应用程序时,应用程序都会崩溃。

日志错误:

com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err 接受格式错误的 JSON :在 com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1567) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 com.google.gson。 stream.JsonReader.checkLenient(JsonReader.java:1416) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 com.google.gson.stream.JsonReader.doPeek(JsonReader.java:597) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:在 com.google.gson.stream .JsonReader.peek(JsonReader.java:429) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:在 com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read (CollectionTypeAdapterFactory.java:74) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java :61) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在retrofit2.converter.gson.GsonResponseBodyConverter.convert (GsonResponseBodyConverter.java:25) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 retrofit2.ServiceMethod.toResponse(ServiceMethod.java:116) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err: 在 retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211) 07 -03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) 07-03 16:17:38.531 25440-25479/com.mohit .dictionaryapp W/System.err: 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:89) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 com.mohit .dictionaryapp.DictionaryApi.searchMeaning(DictionaryApi.java:33) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 com.mohit.dictionaryapp.GetMeaningTask.doInBackground(GetMeaningTask.java:27) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 com.mohit.dictionaryapp.GetMeaningTask.doInBackground (GetMeaningTask.java:13) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err:
在 android.os.AsyncTask$2.call(AsyncTask.java:288) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err: 在 java.util.concurrent.FutureTask.run( FutureTask.java:237) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err: 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 07-03 16:17:38.531 25440-25479/com.mohit.dictionaryapp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 07-03 16:17:38.532 25440-25479/com .mohit.dictionaryapp W/System.err:
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 07-03 16:17:38.532 25440-25479/com.mohit.dictionaryapp W/System。错误:
在 java.lang.Thread.run(Thread.java:818)

DictionaryApi.java

   public class DictionaryApi {

    public interface Alfa{

        @GET("/word.json/{word}/definitions")
        Call<ArrayList<Dictionary>> meaning(@Path("word") String word,@Query("api_key") String api_key);
    }

    public static ArrayList<Dictionary> searchMeaning(String word,String api_key){
        Retrofit retrofit=new Retrofit.Builder().baseUrl("http://api.wordnik.com/v4/")
                .addConverterFactory(GsonConverterFactory.create()).build();
        Alfa alfa=retrofit.create(Alfa.class);
        Call<ArrayList<Dictionary>> call = alfa.meaning(word,api_key);
        try {
            Response<ArrayList<Dictionary>> response=call.execute();
            Log.e("Dpi", response.message().toString());
            Log.e("Dpi",String.valueOf(response.code()));
            return response.body();
        } catch (IOException e) {
            e.printStackTrace();
            return null;

        }
    }
}

Dictionary.java(Pojo)

public class Dictionary {
    public String word;
    public String partOfSpeech;
    public String sequence;
    public String text;
}

字典 api 网址: http ://api.wordnik.com/v4/word.json/fantasy/definitions?api_key=a2a73e7b926c924fad7001ca3111acd55af2ffabf50eb4ae5

请帮我解决这个问题。

4

1 回答 1

1

从从您的 api 获得的 JSON 响应中,尝试将 pojo 更改为以下之一 -

public class Dictionary {
    private List<Object> textProns = new ArrayList<Object>();
    private String sourceDictionary;
    private List<Object> exampleUses = new ArrayList<Object>();
    private List<Object> relatedWords = new ArrayList<Object>();
    private List<Object> labels = new ArrayList<Object>();
    private List<Object> citations = new ArrayList<Object>();
    private String word;
    private String partOfSpeech;
    private String attributionText;
    private String sequence;
    private String text;
    private Double score;

    public List<Object> getTextProns() {
    return textProns;
    }

    public void setTextProns(List<Object> textProns) {
    this.textProns = textProns;
    }

    public String getSourceDictionary() {
    return sourceDictionary;
    }

    public void setSourceDictionary(String sourceDictionary) {
    this.sourceDictionary = sourceDictionary;
    }

    public List<Object> getExampleUses() {
    return exampleUses;
    }

    public void setExampleUses(List<Object> exampleUses) {
    this.exampleUses = exampleUses;
    }

    public List<Object> getRelatedWords() {
    return relatedWords;
    }

    public void setRelatedWords(List<Object> relatedWords) {
    this.relatedWords = relatedWords;
    }

    public List<Object> getLabels() {
    return labels;
    }

    public void setLabels(List<Object> labels) {
    this.labels = labels;
    }

    public List<Object> getCitations() {
    return citations;
    }

    public void setCitations(List<Object> citations) {
    this.citations = citations;
    }

    public String getWord() {
    return word;
    }

    public void setWord(String word) {
    this.word = word;
    }

    public String getPartOfSpeech() {
    return partOfSpeech;
    }

    public void setPartOfSpeech(String partOfSpeech) {
    this.partOfSpeech = partOfSpeech;
    }

    public String getAttributionText() {
    return attributionText;
    }

    public void setAttributionText(String attributionText) {
    this.attributionText = attributionText;
    }

    public String getSequence() {
    return sequence;
    }

    public void setSequence(String sequence) {
    this.sequence = sequence;
    }

    public String getText() {
    return text;
    }

    public void setText(String text) {
    this.text = text;
    }

    public Double getScore() {
    return score;
    }

    public void setScore(Double score) {
    this.score = score;
    }
}

有一个很棒的网站叫做http://www.jsonschema2pojo.org/可以帮助你生成 POJO。

于 2016-07-03T11:59:17.343 回答