2013-12-18 1 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 예외가 발생합니다.

파일의 데이터가 매우 커서 전체 데이터를 단일 문자열 또는 문자열 버퍼 또는 문자열 작성기에 저장할 수 없습니다.

여기 내 코드입니다.

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

도와주세요

..

+0

표준 안드로이드 옆에 어떤 라이브러리를 사용하고 있습니까? – gunar

+0

json-lib-2.2.2-jdk15.jar 및 json-simple-1.1.1.jar을 사용하고 있습니다. – user2085965

+0

그들 중 하나만 사용하면 안됩니까? – gunar

답변

8

은 소스 파일의 상단에 import 문을 확인하십시오.

당신은 아마 줄 말을 가지고

import org.json.JSONArray; 

가 대신해야한다 :

import org.json.simple.JSONArray; 

이클립스에서 작업하는 경우, 또는 기타 지적 IDE를, 당신이 시작했을 때 문제가 아마 무슨 일이 있었 JSONArray으로 시작하는 줄을 입력하십시오. 이 시점에서 IDE는 클래스 JSONArray을 가져올 수있는 다른 가능성을 보여줍니다. 당신은 org.json.JSONArray에 하나 있고 org.json.simple.JSONArray에 하나 있습니다. 후자가 맞지만 첫 번째 것을 선택하면 IDE가 소스 java 파일의 맨 위에 가져 오기 라인을 자동으로 추가합니다.

예외가 아주 명백한 경우 예외는 실제로 org.json.simple.JSONArray 개체이므로 obj 개체를 org.json.JSONArray 개체로 캐스팅 할 수 없음을 알립니다. (이 둘 사이에는 다른 점이 있음을 유의하십시오). 대신 org.json.JSONArray을 사용하려면이 하나가 org.json.simple 패키지에서와 같이

업데이트

, 당신은 jsonParser보다 다른 클래스를 사용해야합니다. 현재 두 개의 라이브러리를 섞어서 사용하고 있습니다.

+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

먼저 파일의 전체 내용을 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(); 
    } 
} 

이제 전체 내용이 문자열 (데이터 변수)에 포함됩니다.

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