Android,保存到内部存储中

Android,保存到内部存储中,android,storage,internal,Android,Storage,Internal,我在测试我的分区,我在这行中出错了 Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 因此,我的设备中没有外部存储器,对吗?如何在内部存储器上保存图像?如果我把这条线 FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIV

我在测试我的分区,我在这行中出错了

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


无法解析标记为的单词上下文。我已经花了一周的时间讨论这个问题,请帮助我,因为这个类默认情况下没有访问上下文的权限,您需要像这样在方法中传递它。请参见我如何添加上下文参数:

public static String saveFile(Context context, Bitmap bitmap, String filename) {}
因此,当您调用它时,您需要传递某种上下文。如果你从活动中调用它,你可以简单地使用它

代码无法工作的原因:无法解析上下文。在代码中,没有所谓的上下文。您必须将其作为参数添加到活动扩展上下文中,以便可以将其作为参数传递,并在活动中调用它:saveFilethis、mbitmap、mfilename

否则,您必须删除static,使该方法成为活动类的成员,并将上下文更改为该类或将其删除。见下文

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.openFileOutputfilename,Context.MODE_PRIVATE

显示其余代码!显然你以前没有定义上下文,但是如果没有任何代码,我们就帮不了你。OKs Jeffrey,我把方法放在这个代码所在的地方,它是活动吗?请发布更多的上下文:不,这不是一个活动,如果不是活动的调用?我从另一个泛型类中调用它,在这种情况下,您还必须向该类传递上下文,就像我们在上面的答案中所做的那样;将其作为参数添加。我从公共类GetImages Extendes AsyncTask调用如果AsyncTask是活动中的子类,则可以调用ActivityName.this,其中ActivityName是活动的名称。如果AsyncTask不在活动中,则需要将上下文传递给构造函数中的AsyncTask,以便再次添加上下文参数,就像在回答中一样。Oks,我删除了静态,现在openFileOutput未定义,因为您没有在活动中声明方法,而是在其他地方声明方法。作为参数传递。我从任务类调用它
public static String saveFile(Context context, Bitmap bitmap, String filename)...
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();
        }
    }
}