Я создаю 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;
}
}
СпасибоВы!