JSON в Gson - значение не может быть преобразовано в JSONObject7 - PullRequest
0 голосов
/ 08 декабря 2018

Я создаю Database из JSON.Я получаю эту ошибку при запуске приложения: Проблема с анализом новостей JSON Результаты org.json.JSONException: Значение Трампа типа java.lang.String не может быть преобразовано в JSONObject

Вот код:

private static List<News> extractFeatureFromJson(String newsJSON) {
    if (TextUtils.isEmpty( newsJSON )) {
        return null;
    }

    List<News> newsall = new ArrayList<>();

    try {
        JSONObject data = new JSONObject(newsJSON);
        JSONArray results = data.getJSONArray("articles");
        for (int i = 0; i < results.length(); i++) {
            JSONObject obj = results.getJSONObject(i);
            String webTitle = obj.getString("title");
            String webUrl = obj.getString("url");
            String webImage = obj.getString( "urlToImage" );

            List<NewsForDB> newsForDB = new ArrayList<>(  );
            Gson gson = new Gson();
            NewsForDB webTitleForDB=gson.fromJson( extractFeatureFromJson( webTitle ).toString(), NewsForDB.class );
            newsForDB.add(webTitleForDB);
            NewsForDB urlForDB=gson.fromJson( extractFeatureFromJson( webUrl ).toString(), NewsForDB.class );
            newsForDB.add(urlForDB);
            NewsForDB webImageForDB=gson.fromJson( extractFeatureFromJson( webImage ).toString(), NewsForDB.class );
            newsForDB.add( webImageForDB );


            News news = new News(webTitle, webUrl, webImage);
            newsall.add(news);

        }



    } catch (JSONException e) {
        Log.e("QueryUtils", "Problem parsing the news JSON results", e);
    }
    return newsall;
}

Когда нет этих строк кода

List<NewsForDB> newsForDB = new ArrayList<>(  );
        Gson gson = new Gson();
        NewsForDB webTitleForDB=gson.fromJson( extractFeatureFromJson( webTitle ).toString(), NewsForDB.class );
        newsForDB.add(webTitleForDB);
        NewsForDB urlForDB=gson.fromJson( extractFeatureFromJson( webUrl ).toString(), NewsForDB.class );
        newsForDB.add(urlForDB);
        NewsForDB webImageForDB=gson.fromJson( extractFeatureFromJson( webImage ).toString(), NewsForDB.class );
        newsForDB.add( webImageForDB );

Все отлично работает, но я пытаюсь подготовить код для использования ActiveAndroid ORM.

Есть предложения?

Спасибо!

ОБНОВЛЕНИЕ:

Я следую за первым ответом от здесь .

Новости:

public class News {
private String mWebTitle;
private String mUrl;
private String mImage;

public News(String webTitle, String webUrl, String webImage) {
    mWebTitle = webTitle;
    mUrl = webUrl;
    mImage = webImage;

}

public String getWebTitle() {
    return mWebTitle;
}
public String getUrl() {
    return mUrl;
}
public String getWebImage() {return mImage;}

}

А вот часть кода из QueryUtils, который до этого был опубликован в первом вопросе

public static List<News> fetchNewsData(String requestUrl) {
    URL url = createUrl( requestUrl );

    String jsonResponse = null;
    try {
        jsonResponse = makeHttpRequest( url );
    } catch (IOException e) {
        Log.e( LOG_TAG, "Problem making the HTTP request.", e );
    }

    List<News> news = extractFeatureFromJson( jsonResponse );

    return news;
}

А вот NewsForDB.java

    import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;


@Table(name = "NewsDB")

public class NewsForDB extends Model {

    @Column(name = "title", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE)
    public String title;

    @Column(name = "url")
    public String url;

    @Column(name = "urlToImage")
    public String urlToImage;

    public NewsForDB(){
        super();
    }

    public NewsForDB(String title, String url, String urlToImage){
        super();
        this.title = title;
        this.url = url;
        this.urlToImage = urlToImage;
    }
}

СпасибоВы!

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы можете редактировать код так же, как это!

private static List<News> extractFeatureFromJson(String newsJSON) {
    if (TextUtils.isEmpty( newsJSON )) {
        return null;
    }

    List<News> newsall = new ArrayList<>();

    try {
        JSONObject data = new JSONObject(newsJSON);
        JSONArray results = data.getJSONArray("articles");
        for (int i = 0; i < results.length(); i++) {
            Gson gson = new Gson();
            JSONObject obj = results.getJSONObject(i);
            News news = gson.fromJson(obj.toString() , News.class);
            newsall.add(news);
        }
    } catch (JSONException e) {
        Log.e("QueryUtils", "Problem parsing the news JSON results", e);
    }
    return newsall;
}
0 голосов
/ 08 декабря 2018

Я думаю, что проблема возникает, когда вы делаете рекурсивную функцию extractFeatureFromJson при вызове extractFeatureFromJson( webTitle ) и т. Д.

Может быть, вам следует поделиться своим классом News, NewsForDB, тестовые случаи, которые делаютисключение, и можете ли вы сказать мне цель создания объекта newsForDB без использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...