
我有一个带有ImageVIEw的Activity,如果它是空的并且单击,则应该从Internet加载图像并将其保存到内部存储.所以活动看起来像这样:
public class PlaceCreate extends Activity {Context context;@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.create); context = this; ImageVIEw img = (ImageVIEw) findVIEwByID(R.ID.imageVIEw); img.setonClickListener(new OnClickListener() { public voID onClick(VIEw v) { EditText edit = (EditText)findVIEwByID(R.ID.editTextname); Download(edit.getText().toString()); } });}private boolean Download(String name){ try { URL u = new URL("http://example.com/img.png"); httpURLConnection c = (httpURLConnection)u.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); fileOutputStream f = context.openfileOutput(name, Context.MODE_PRIVATE); inputStream in = c.getinputStream(); byte[] buffer = new byte[1024]; int len1 = 0; while((len1 = in.read(buffer)) > 0 ) { f.write(buffer, 0, len1); } f.close(); fileinputStream is = openfileinput(name); Bitmap bitmap = BitmapFactory.decodeStream(is); is.close(); ImageVIEw img = (ImageVIEw) findVIEwByID(R.ID.imageVIEwPlan); img.setimageBitmap(bitmap); } catch(IOException e) { return false; } return true;}}问题是我在openfileOutput的行上得到了NullPointerException.我发现了几个类似的问题,但所有答案都暗示null是一个缺失的上下文.因为在这种情况下它是一个活动,它显然有一个上下文(this),它不是null.我试图通过上下文成员调用openfileOutput(带有这个暗示).两种方法都失败了.此外,我尝试将on.tatContext()从onClick传递到Download作为附加参数,并且此值不为null,但也产生了相同的异常. (如果重要,请求的文件名是有效的文件名,例如“abc”.)
有人可以对此有所了解吗?
这是一个堆栈的例子:
04-22 00:45:10.659: W/dalvikvm(330): threadID=1: thread exiting with uncaught exception (group=0x40015560)04-22 00:45:10.909: E/AndroIDRuntime(330): FATAL EXCEPTION: main04-22 00:45:10.909: E/AndroIDRuntime(330): java.lang.NullPointerException04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.app.ContextImpl.openfileOutput(ContextImpl.java:420)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.content.Contextwrapper.openfileOutput(Contextwrapper.java:158)04-22 00:45:10.909: E/AndroIDRuntime(330): at com.example.scanner.PlaceCreate.Download(PlaceCreate.java:93)04-22 00:45:10.909: E/AndroIDRuntime(330): at com.example.scanner.PlaceCreate.accesspublic fileOutputStream openfileOutput(String name, int mode) throws fileNotFoundException { final boolean append = (mode&MODE_APPEND) != 0; file f = makefilename(getfilesDir(), name); try { fileOutputStream fos = new fileOutputStream(f, append); setfilePermissionsFromMode(f.getPath(), mode, 0); return fos; } catch (fileNotFoundException e) { } file parent = f.getParentfile(); parent.mkdir(); fileUtils.setPermissions( parent.getPath(), fileUtils.S_IRWXU|fileUtils.S_IRWXG|fileUtils.S_IXOTH, -1, -1); fileOutputStream fos = new fileOutputStream(f, append); setfilePermissionsFromMode(f.getPath(), mode, 0); return fos;}(PlaceCreate.java:84)04-22 00:45:10.909: E/AndroIDRuntime(330): at com.example.scanner.PlaceCreate.onClick(PlaceCreate.java:67)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.vIEw.VIEw.performClick(VIEw.java:2485)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.vIEw.VIEw$PerformClick.run(VIEw.java:9080)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.os.Handler.handleCallback(Handler.java:587)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.os.Handler.dispatchMessage(Handler.java:92)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.os.Looper.loop(Looper.java:123)04-22 00:45:10.909: E/AndroIDRuntime(330): at androID.app.ActivityThread.main(ActivityThread.java:3683)04-22 00:45:10.909: E/AndroIDRuntime(330): at java.lang.reflect.Method.invokeNative(Native Method)04-22 00:45:10.909: E/AndroIDRuntime(330): at java.lang.reflect.Method.invoke(Method.java:507)04-22 00:45:10.909: E/AndroIDRuntime(330): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)04-22 00:45:10.909: E/AndroIDRuntime(330): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:597)04-22 00:45:10.909: E/AndroIDRuntime(330): at dalvik.system.NativeStart.main(Native Method)这里有一些更多的发现.根据堆栈,ContextImpl文件中出现错误,我发现此方法中的父局部变量为null.这是代码:
ContextImpl所以现在问题是如何确保对f.getParentfile()的调用不会返回null,为什么它会不时地工作?
解决方法:
The problem is that I get NullPointerException on the line with openfileOutput.
您在openfileOutput()的实现中获得了NullPointerException.这就是为什么您需要为SO提供堆栈跟踪,而不是仅提供异常名称.行上的异常与行触发的异常不同,尤其是NullPointerException.
基于我在
>您正在运行的AndroID版本还有一些其他可能的问题,这在当前的openfileOutput()实现中是不可见的上读取的openfileOutput(),要么:
>名称为null,或
>你有一个非常奇怪的背景,或
我将首先完全删除上下文,因为您在Activity中并且不需要它.然后,输入一些Log语句或设置断点以查看name是什么.
总结以上是内存溢出为你收集整理的android – 在Activity中的openFileOutput处的NullPointerException全部内容,希望文章能够帮你解决android – 在Activity中的openFileOutput处的NullPointerException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)