我已经阅读了其他各种帖子,但还没有找到适合我的答案。他们一直在讨论外部存储的使用,我需要使用'默认' (内部)存储。
我的一个Activity例程中有一个非常简单的例程
String PATH = "/data/data/com.mydomain.myapplicationname/files";
SystemIOFile.MkDir(PATH); // Ensure Recipient Path Exists
然后在我的SystemIOFile类中我有
static public Boolean MkDir(String directoryName)
{
Boolean isDirectoryFound = false;
File Dir = new File(directoryName);
if(Dir.isDirectory())
{
isDirectoryFound = true;
} else {
Dir.mkdirs();
if (Dir.isDirectory())
{
isDirectoryFound = true;
}
}
Dir = null;
return isDirectoryFound;
}
在我的Android.Manifest.xml中我有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
所以看起来好像所有的部分都可以使用。
但它不起作用。
当我单步执行MKDir()例程时,它总是失败
if (Dir.isDirectory())
始终返回 false
后续 Dir.mkdirs()始终返回 false
我错过了什么?
答案 0 :(得分:2)
excapeXml="true"
不是外部存储路径。您需要做的是获取应用程序分配的存储路径。
"/data/data/com.mydomain.myapplicationname/files"
如果您需要访问应用程序的内部文件空间(如果应用程序访问该空间拥有它),那么您可以使用Context c = /*get your context here*/;
File path = new File(c.getExternalFilesDir().getPath() + "/folder1/folder2/");
path.mkdirs();
的{{3}}。这将返回应用程序的内部存储位置。
代码基本相同:
Context
答案 1 :(得分:2)
这是一个很好的问题。
首先,如果您不直接引用if (mysql_num_rows($exe)> 0) {
$response['error'] = 'false';
$response['forum'] = Array();
while($result = mysql_fetch_array($exe)){
$response['forum'][] = Array(
'uid' => $result['uid'],
'class_divisionId' => $result['class_divisionId'],
'username' => $result['username'],
'description' => $result['description'],
'date_time' => $result['date_time'],
'name' => $result['name']
);
}
return $response;
} else {
return false;
}
路径,那就更好了。请改用/sdcard
。
其次,假设您想要访问自己的应用程序文件 - 您也不希望直接引用Environment.getExternalStorageDirectory().getPath()
路径,因为它可能会在多用户方案中有所不同。请改用/data/data
。
实现上述内容,我们看到:
Context.getFilesDir().getPath()
返回 false ,而:
String PATH = "/data/data/com.mydomain.myapplicationname/files";
SystemIOFile.MkDir(PATH);
返回 true 。
另请注意,您忽略了String PATH = Environment.getExternalStorageDirectory().getPath()
+ getApplicationContext().getFilesDir().getPath();
SystemIOFile.MkDir(PATH);
内Dir.mkdirs()
的结果。
希望这有帮助。