android– 在Activity中的openFileOutput处的NullPointerException

android– 在Activity中的openFileOutput处的NullPointerException,第1张

概述我有一个带有ImageView的Activity,如果它是空的并且单击,则应该从Internet加载图像并将其保存到内部存储.所以活动看起来像这样:publicclassPlaceCreateextendsActivity{Contextcontext;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(s

我有一个带有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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1101687.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存