Android,保存到内部存储

时间:2014-11-19 14:48:29

标签: android storage internal

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

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 ;
}

}

“上下文”一词标记为“无法解决”。我这个问题花了一个星期,请帮帮我

2 个答案:

答案 0 :(得分:0)

由于此类默认情况下不能访问Context,因此您需要在此方法中传递它(请参阅我添加Context参数的方式):

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

所以当你调用它时,你需要传递某种上下文。如果您从Activity拨打电话,则可以使用this

答案 1 :(得分:0)

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)