저는 로컬 json 파일을 읽고 ListView를 채우지 않아도되는 개발 및 안드로이드 응용 프로그램을 개발 중입니다. 문제는 로컬 json 파일을 읽을 수 없으며 여기서 어떻게 진행되는지 보여줍니다.로컬 json 파일을 읽을 수 없습니다 : 열기 실패 : ENOENT (해당 파일이나 디렉토리 없음)
먼저 ObjectMapper과 작업하기 때문에 객체 클래스를 만들었습니다.
이미 기본 클래스 (테마, CouchesTheme 및 ClassesEvenement)가 생성되었습니다. 내가 테마리스트의 대응되는 HashMap 클래스를 생성
package com.myapp.theme;
public class LireTheme {
private Theme theme;
private CouchesTheme couchesTheme;
private ClassesEvenement classesEvenement;
private String message;
private boolean ok;
public LireTheme() {
super();
// TODO Auto-generated constructor stub
}
public LireTheme(Theme theme, CouchesTheme couchesTheme,
ClassesEvenement classesEvenement, String message, boolean ok) {
super();
this.theme = theme;
this.couchesTheme = couchesTheme;
this.classesEvenement = classesEvenement;
this.message = message;
this.ok = ok;
}
public Theme getTheme() {
return theme;
}
public void setTheme(Theme theme) {
this.theme = theme;
}
public CouchesTheme getCouchesTheme() {
return couchesTheme;
}
public void setCouchesTheme(CouchesTheme couchesTheme) {
this.couchesTheme = couchesTheme;
}
public ClassesEvenement getClassesEvenement() {
return classesEvenement;
}
public void setClassesEvenement(ClassesEvenement classesEvenement) {
this.classesEvenement = classesEvenement;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isOk() {
return ok;
}
public void setOk(boolean ok) {
this.ok = ok;
}
}
초 :
여기 subclasse에게 LireTheme을합니다.
package com.myapp.recensement;
import java.util.ArrayList;
import java.util.HashMap;
import com.myapp.theme.LireTheme;
public class LireThemes extends HashMap<String, ArrayList<LireTheme>> {
private static final long serialVersionUID = 1L;
}
다음과 같이 사용하십시오.
package com.myapp.recensement;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.ObjectMapper;
import android.os.Environment;
import android.util.Log;
import com.myapp.theme.LireTheme;
public class LireThemesController {
private ObjectMapper objectMapper = null;
private JsonFactory jsonFactory = null;
private JsonParser jp = null;
private ArrayList<LireTheme> themeList = null;
private LireThemes lirethemes = null;
private File jsonFile;
boolean availble=false;
public LireThemesController() {
objectMapper = new ObjectMapper();
jsonFactory = new JsonFactory();
}
public void init() {
availble=isExternalStorageReadble();
if(availble){
Log.w("myApp", "file available");
}else{
Log.w("myApp", "file not available");
}
jsonFile = new File("c:\\lireThemes.json");
try{
jp = jsonFactory.createJsonParser(jsonFile);
lirethemes = objectMapper.readValue(jp, LireThemes.class);
themeList = lirethemes.get("themes");
} catch(JsonParseException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
public ArrayList<LireTheme> findAll() {
return themeList;
}
public LireTheme findById(int id) {
return themeList.get(id);
}
public boolean isExternalStorageReadble() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
}
또한 AndroidManifest에 이미 권한이 추가되었습니다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
내가이 오류를 얻을 실행 : 그 문제에 대한
12-29 04:16:04.287: W/System.err(2060): java.io.FileNotFoundException: /c:\lireThemes.json: open failed: ENOENT (No such file or directory).
모든 솔루션을하세요?
c : Windows에서 하드 드라이브 문자입니까? 특히 외부 저장소를 읽는 경우에는 안드로이드에 할 일이 없습니다. 파일 이름의 접두사는 외부 저장소 경로입니다. 어떤 Context.getExternalFilesDir() 메소드를 사용하여 찾을 수 있습니다. –
getAssets()를 시도해 보았습니다. 귀하의 anwser에 감사드립니다. –