我试图在我创建的服务类中调用此函数表单。我遇到了使这个功能工作所需的上下文的一些问题。据我所知,如果我们在内部使用上下文
方法getBaseContext()
应该执行的服务,但由于某种原因,此方法给了我一个空指针异常。这是我用于文件阅读器方法的代码。我也会包含例外。
我尝试过的一些事情是关于将getBaseContext()
更改为getApplicationContext()
的问题,但我没有得到任何结果。我们如何在服务内部操纵上下文?
文件阅读器代码:
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();
}
例外:
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)
作为旁注,此方法在从实际活动中调用时有效。但不是来自服务范围内。这背后有什么特别的推理吗?
我很感激指点。
答案 0 :(得分:4)
服务是一种上下文,所以你应该能够:
openFileInput(fileName);
没有getBaseContext或getApplicationContext。
如果课程扩展了服务。 这至少不会在上下文中引入NPE。
但是你可能是从错误的方法读取文件,例如onBind而不是构造函数?
此外,请确保您具有您尝试阅读的该文件的权限,因为在Android 6.0上您需要获得访问外部文件的权限。
此外,请确保在调用方法时字符串filename不为null。