2013-12-18 4 views
5

Мне нужно прочитать данные из файла (на SD-карте) JsonArray и сохранить его в базе данных SQLite.java.lang.ClassCastException: org.json.simple.JSONArray не может быть передан в org.json.JSONArray

, но я получаю исключение java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.JSONArray при анализе данных до JsonArray.

Данные в файле очень большие, все данные не могут быть сохранены в одном String или String Buffer или String Builder.

Вот мой код.

FileReader fileReader = new FileReader(file_path); 
Object obj = jsonParser.parse(fileReader); 
JSONArray jsonArray = (JSONArray) obj; // Exception. 

Пожалуйста, помогите ..

+0

Какие библиотеки вы используете рядом со стандартным Android? – gunar

+0

Я использую json-lib-2.2.2-jdk15.jar и json-simple-1.1.1.jar. – user2085965

+0

Разве вы не пытаетесь использовать только один из них? – gunar

ответ

8

Проверьте операторы импорта в верхней части исходного файла.

Вы, наверное, есть линия, говоря:

import org.json.JSONArray; 

Это должно быть вместо этого:

import org.json.simple.JSONArray; 

Если вы работаете в упадке, или любой другой интеллектуальный IDE, проблема, вероятно, произошло, когда вы начали введите строку, начинающуюся с JSONArray. В этот момент среда IDE покажет вам различные возможности импорта класса JSONArray. У вас есть один в org.json.JSONArray и один в org.json.simple.JSONArray. Последний правильный, но вы выбираете первый, и ваша среда IDE автоматически добавляет строку импорта вверху вашего исходного java-файла.

С исключительной очевидностью возникает проблема, исключение сообщает, что объект obj нельзя передать объекту org.json.JSONArray, поскольку он действительно является объектом org.json.simple.JSONArray. (Обратите внимание, что между ними есть другое).

Update

Если вы хотите использовать org.json.JSONArray вместо этого, вы должны использовать другой класс, чем jsonParser как это один из org.json.simple пакета. В настоящее время вы смешиваете две библиотеки, и именно это вызывает ваши проблемы.

+0

Спасибо за ваш ответ .. но делает org.json.JSONArray имеет jsonParser functionlity.? Если я удалю org.json.simple.JSONArray, jsonParser покажет мне ошибку. – user2085965

+0

@ user2085965: Если вы не хотите проводить разбор вручную, вы можете использовать GSON и сделать жизнь проще. – Swayam

+0

@ user2085965: См. Мой обновленный ответ. Вы должны удалить 'import org.json.JSONArray;' не 'import org.json.simple.JSONArray; ' –

0

Вы можете сначала прочитать все содержимое файла в String.

FileInputStream fileInputStream = null; 
String data=""; 
StringBuffer stringBuffer = new StringBuffer(""); 
try{ 
    fileInputStream=new FileInputStream(filename); 
    int i; 
    while((i=fileInputStream.read())!=-1) 
    { 
     stringBuffer.append((char)i); 
    } 
    data = stringBuffer.toString(); 
    csvFile.delete(); 
} 
catch(Exception e){ 
     LoggerUtil.printStackTrace(e); 
} 
finally{ 
    if(fileInputStream!=null){ 
     fileInputStream.close(); 
    } 
} 

Теперь у вас будет весь контент в String (переменная данных).

JSONParser parser = new JSONParser(); 
org.json.simple.JSONArray jsonArray= (org.json.simple.JSONArray) parser.parse(data); 

После этого вы можете использовать jsonArray, как хотите.

+0

Получение «Исключение в потоке» main »java.lang.ClassCastException: org.json.simple.JSONObject не может быть брошенным в org.json.simple.JSONArray " – mahi

Смежные вопросы