【问题标题】:Android, to save into internal StorageAndroid,保存到内部存储
【发布时间】:2014-11-19 14:48:28
【问题描述】:

我正在测试我的设备,我在这一行得到了 FALSE

Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);

所以,我的设备中没有外部存储,对吗?如何将图像保存在内部存储中?如果我把这条线...

FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);

课程完成

public class ImageStorage {

public static String saveFile(Bitmap bitmap, String filename) {




    try {
        FileOutputStream out = context.openFileOutput(filename, Context.MODE_PRIVATE);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

   }


public static File getImage(String imagename) {

    File mediaImage = null;
    try {
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root);
        if (!myDir.exists())
            return null;

        mediaImage = new File(myDir.getPath() + "/images/"+imagename);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return mediaImage;
}

public static boolean checkifImageExists(String imagename)
{
    Bitmap b = null ;
    File file = ImageStorage.getImage("/"+imagename+".jpg");
    String path = file.getAbsolutePath();

    if (path != null)
        b = BitmapFactory.decodeFile(path); 

    if(b == null ||  b.equals(""))
    {
        return false ;
    }
    return true ;
}

}

“上下文”一词被标记为“无法解决”。这个问题我花了一周时间,请帮助我

【问题讨论】:

  • 向我们展示其余的代码!显然您之前没有定义上下文,但是没有任何代码我们无法帮助您。
  • 好的,杰弗里,我把方法放了
  • 这段代码在哪里,它是一个Activity吗?请发布更多上下文:)
  • 不,这不是一个活动

标签: android storage internal


【解决方案1】:

因为这个类默认不能访问Context,你需要像这样在方法中传递它(看看我是如何添加Context参数的):

public static String saveFile(Context context, Bitmap bitmap, String filename) {}

所以当你调用它时,你需要传递某种上下文。如果您从Activity 调用它,您可以简单地使用this

【讨论】:

  • 如果不是从 Activity 调用?我从另一个泛型类中调用它
  • 在这种情况下,您还必须将Context 传递给该类,就像我们在上面的答案中所做的那样;将其添加为参数。
  • 我从公共类 GetImages 调用扩展 AsyncTask
  • 如果AsyncTask是Activity中的子类,可以调用ActivityName.this,其中ActivityName是Activity的名称。如果 AsyncTask 不在 Activity 中,那么您需要在构造函数中将上下文传递给 AsyncTask(因此再次添加 Context 参数,就像在答案中一样)。
【解决方案2】:
public static String saveFile(Bitmap bitmap, String filename) {
    try {
        FileOutputStream out = context.openFileOutput(filename, Context.MODE_PRIVATE);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    } 
    catch (Exception e) {
        e.printStackTrace();
    }
}

您的代码不起作用的原因:context 无法解析。在代码中,没有名为context 的内容。您必须将其添加为参数(您的Activity 扩展了Context,因此您可以将其作为参数传递,并在您的Activity 中调用它:saveFile(this, mbitmap, mfilename)

public static String saveFile(Context context, Bitmap bitmap, String filename)...

那,或者您必须删除 static,并使该方法成为您的 Activity 类的成员,并将 context 更改为 this(或删除它)。见下文。

public class MyActivity extends Activity {
    //your activity members

    public String saveFile(Bitmap bitmap, String filename) {
        try {
            FileOutputStream out = this.openFileOutput(filename, Context.MODE_PRIVATE);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果方法是从内部AsyncTask 类调用的,则调用MyActivity.this.openFileOutput(filename, Context.MODE_PRIVATE)

【讨论】:

  • 好的,我删除了静态,现在 openFileOutput 是未定义的
  • 因为您没有在Activity 中声明您的方法,而是在其他地方声明。将其作为参数传递。
  • 我从扩展 AsyncTask 类中调用它
猜你喜欢
  • 1970-01-01
  • 2013-10-28
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2011-10-10
  • 1970-01-01
  • 2019-06-27
相关资源
最近更新 更多