2017-07-30 5 views
0

Ich arbeite an einer App, die eine automatische E-Mail auf Knopfdruck senden muss. Das Problem, das ich derzeit habe, ist, dass ich eine JSON-Datei lesen muss und wenn ich den Pfad des JSON in Assets in eine neue FileReader() übergeben übergeben bekomme ich eine Datei nicht gefunden Exception. Hier kommt der Weg. (Mich gefragt, ob Uri.parse().toString ist redundant):FileNotFoundException beim Versuch, Json Asset zu lesen

private static final String CLIENT_SECRET_PATH = 
     Uri.parse("file:///android_asset/raw/sample/***.json").toString() 

und hier ist die Methode, die ich vorbei bin es in:

sClientSecrets = GoogleClientSecrets 
     .load(jsonFactory, new FileReader(CLIENT_SECRET_PATH)); 

der JSON-Datei, die ich für den Zugriff bin attemping in Asset meine apps Ordner unter dem ist app root in android projektverzeichnis (/ app/assets /)

Ich bin mir nicht sicher, was ich hier falsch mache, aber ich bin mir sicher, es ist etwas einfaches. Bitte hilf mir, in die richtige Richtung zu weisen.

+0

Sind Sie sicher, dass Ihre **. JSON-Datei in 'Sample' Ordner unter 'Raw' in Asset-Verzeichnis ist? –

Antwort

0

@Rohit konnte ich die Methode, die Sie als Ausgangspunkt verwenden. Das einzige Problem dabei war, dass die Gmail API, die ich verwende, einen Reader als Parameter und keine Zeichenfolge benötigt. Hier ist, was ich getan habe. und ich bekomme keine Datei mehr. vielen Dank.

public InputStreamReader getJsonStreamReader(String file){ 
    InputStreamReader reader = null; 
    try { 
     InputStream in = getAssets().open(file); 
     reader = new InputStreamReader(in); 
    }catch(IOException ioe){ 
     Log.e("launch", "error : " + ioe); 
     } 
    return reader; 
} 
1

Sie sollten nicht über den direkten Dateipfad auf die Assets zugreifen. Die Dateien sind gepackt und der Speicherort wird auf jedem Gerät geändert. Sie benötigen eine Hilfsfunktion zu verwenden, das Vermögen zu erhalten Weg

getAssets().open() 

this post für weitere Informationen.

1

Sie können diese Funktion verwenden, um eine JSON-Zeichenfolge von Assets abzurufen und diese Zeichenfolge an den FileReader zu übergeben.

public String loadJSONFromAsset() { 
    String json = null; 
    try { 
     InputStream is = getActivity().getAssets().open("yourfilename.json"); 
     int size = is.available(); 
     byte[] buffer = new byte[size]; 
     is.read(buffer); 
     is.close(); 
     json = new String(buffer, "UTF-8"); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
     return null; 
} 
return json; 
} 
+0

Ich war in der Lage, Ihre bereitgestellte Methode zu verwenden, um zu bauen, was ich benötigte. Vielen Dank. Siehe Antwort, die ich unten gepostet habe. –

0

Halten Sie Ihre Datei direkt im Anlagenverzeichnis und dann Rohprobe.

Und dann wird Dateipfad so sein

private static final String CLIENT_SECRET_PATH = 
    Uri.parse("file:///android_asset/***.json").toString() 

Ihr Problem hoffen gelöst werden ..

Verwandte Themen