2013-12-18 36 views
5

ファイル(SDカード上)からJsonArrayデータを読み込み、SQLiteデータベースに格納する必要があります。java.lang.ClassCastException:org.json.simple.JSONArrayをorg.json.JSONArrayにキャストできません

しかし、JsonArrayにデータを解析しているうちにjava.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.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

あなたはそれらのうちの1つだけを使うべきではありませんか? – gunar

答えて

8

は、ソースファイルの先頭にインポート文を確認してください助けてください。

おそらくラインは言っている:それは代わりにする必要があります

import org.json.JSONArray; 

import org.json.simple.JSONArray; 

あなたは日食で働いて、またはその他の知的IDEされている場合は、起動したときに、問題はおそらく起こりましたJSONArrayで始まる行を入力します。その時点で、IDEはクラスJSONArrayをインポートするさまざまな可能性を示します。 org.json.JSONArrayに1つあり、org.json.simple.JSONArrayに1つあります。後者は正しいですが、最初のものを選択すると、IDEは自動的にソースJavaファイルの先頭にインポート行を追加します。

例外は非常に明白ですが、例外は実際にorg.json.simple.JSONArrayオブジェクトであるため、オブジェクトにキャストすることができないことを示します。objオブジェクトは例外です。 (両者には異なる点があることに注意してください)。

更新

あなたの代わりにorg.json.JSONArrayを使用したい場合はこの1つがorg.json.simpleパッケージからであるとして、あなたはjsonParserよりも別のクラスを使用する必要があります。現在、2つのライブラリを混在させています。それがあなたの問題の原因です。

+0

返信いただきありがとうございます。しかし、org.json.JSONArrayにはjsonParser関数があります。 org.json.simple.JSONArrayを削除した場合、jsonParserが私にエラーを表示します。 – user2085965

+0

@ user2085965:手動で解析したくない場合は、GSONを使用して簡単に作業できます。 – Swayam

+0

@ user2085965:最新の回答をご覧ください。 'import org.json.JSONArray;' not '' import org.json.simple 'を削除する必要があります。JSONArray; ' –

0

まずファイルの内容全体を文字列に読み込むことができます。

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

関連する問題