Ich versuche, dieses Funktionsformular innerhalb einer Serviceklasse aufzurufen, die ich erstellt habe. Ich habe einige Probleme mit dem Kontext, der erforderlich ist, damit diese Funktion funktioniert. Es ist meines Wissens, dass, wenn wir mit Kontext innerhalb eines Dienstes arbeiten, der die Methode getBaseContext()
tun sollte, aber aus irgendeinem Grund gibt mir diese Methode eine Nullzeigerausnahme. Dies ist der Code, den ich für die File-Reader-Methode verwende. Ich werde die Ausnahme auch einschließen.Übergeben von Kontext in einem Service
Einige der Dinge, die ich ausprobiert habe, sind mit Blick auf die Änderung getBaseContext()
zu getApplicationContext()
, aber ich bekomme keine Ergebnisse. Wie manipulieren wir den Kontext innerhalb eines Dienstes?
Datei Lesercode:
public String fileReader(Context context, String fileName) throws IOException, JSONException {
FileInputStream fis = getBaseContext().openFileInput(fileName);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader streamReader = new BufferedReader(isr);
StringBuilder responseStrBuilder = new StringBuilder();
String inputString;
while((inputString = streamReader.readLine()) != null) {
responseStrBuilder.append(inputString);
}
streamReader.close();
isr.close();
fis.close();
return responseStrBuilder.toString();
}
Die Ausnahme:
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileInputStream android.content.Context.openFileInput(java.lang.String)' on a null object reference
W/System.err: at com.example.allwaystrack01.internalhtml_chat_demo.services.SystemWebService.fileReader(SystemWebService.java:115)
W/System.err: at com.example.allwaystrack01.internalhtml_chat_demo.services.SystemWebService$WebAppInterface.returnContent(SystemWebService.java:176)
W/System.err: at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
W/System.err: at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:154)
W/System.err: at android.os.HandlerThread.run(HandlerThread.java:61)
Als Randbemerkung, funktioniert diese Methode, wenn sie von einer tatsächlichen Aktivität aufgerufen wird. Aber nicht aus dem Service. Irgendeine bestimmte Begründung dahinter?
Ich würde gerne Zeiger.
versuchen Sie dies 'context.openFileInput (fileName);' –
in der Filereader-Methode, die Sie in einem Kontextobjekt übergeben, warum verwenden Sie das nicht, warum verwenden Sie getBaseContext()? – Tacolibre
Ich referenzierte Kontext vor, aber es funktionierte nicht, eine Lösung, die andere in einem anderen Beitrag vorgeschlagen, war die Verwendung von getBaseContext(), also habe ich versucht, das auch zu verwenden. Es funktioniert nicht in beide Richtungen. –