2013-12-18 11 views
5

Ich muss eine JsonArray Daten aus einer Datei (auf einer SD-Karte) lesen und in einer SQLite-Datenbank speichern.java.lang.ClassCastException: org.json.simple.JSONArray kann nicht in org.json.JSONArray umgewandelt werden

aber ich bekomme eine java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.JSONArray Ausnahme beim Parsen von Daten zu JsonArray.

Daten in der Datei sind sehr groß, die gesamten Daten können nicht in einem einzigen String oder String Buffer oder String Builder gespeichert werden.

Hier ist mein Code.

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

Bitte helfen ..

+0

Welche Bibliotheken verwenden Sie neben Standard Android? – gunar

+0

Ich verwende json-lib-2.2.2-jdk15.jar und json-simple-1.1.1.jar. – user2085965

+0

Sollten Sie nicht versuchen, nur einen von ihnen zu verwenden? – gunar

Antwort

8

Ihre Import-Anweisungen am Anfang der Quelldatei überprüfen.

Sie haben wahrscheinlich eine Linie zu sagen:

import org.json.JSONArray; 

Es sollte stattdessen sein:

import org.json.simple.JSONArray; 

Wenn Sie in Eclipse arbeiten, oder jede andere intelligente IDE, das Problem wahrscheinlich passiert ist, als Sie begonnen Eingabe der Zeile beginnend mit JSONArray. An diesem Punkt würde die IDE Ihnen verschiedene Möglichkeiten zeigen, die Klasse JSONArray zu importieren. Sie haben eine in org.json.JSONArray und eine in org.json.simple.JSONArray. Letzteres ist der richtige, aber Sie wählen den ersten, und Ihre IDE hat automatisch eine Importzeile am Anfang Ihrer Quell-Java-Datei hinzugefügt.

Von der Ausnahme ist das Problem ziemlich offensichtlich, die Ausnahme teilt Ihnen mit, dass Ihr obj Objekt nicht in ein org.json.JSONArray Objekt umgewandelt werden kann, da es wirklich ein org.json.simple.JSONArray Objekt ist. (Beachten Sie, dass zwischen den beiden ein Unterschied besteht).

aktualisieren

Wenn Sie org.json.JSONArray stattdessen verwenden möchten, sollten Sie eine andere Klasse als jsonParser verwenden, da dies eine von der org.json.simple Paket. Momentan mischst du die zwei Bibliotheken, und das verursacht deine Probleme.

+0

Vielen Dank für Ihre Antwort .. aber hat org.json.JSONArray jsonParser functionlity.? Wenn ich org.json.simple.JSONArray entferne, zeigt jsonParser mir einen Fehler an. – user2085965

+0

@ user2085965: Wenn du das Parsing nicht manuell machen willst, kannst du GSON benutzen und das Leben leichter machen. – Swayam

+0

@ user2085965: Siehe meine aktualisierte Antwort. Sie sollten 'import org.json.JSONArray;' nicht 'import org.json.simple entfernen.JSONArray; ' –

0

Sie können zuerst den gesamten Inhalt der Datei in einen String lesen.

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(); 
    } 
} 

Jetzt haben Sie den gesamten Inhalt in String (Datenvariable).

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

Danach können Sie jsonArray verwenden, wie Sie möchten.

+0

Getting "Ausnahme im Thread" main "java.lang.ClassCastException: org.json.simple.JSONObject kann nicht in org.json.simple.JSONArray umgewandelt werden " – mahi

Verwandte Themen