Вы должны добавить onSuccessListener в filePath.getDownloadUrl (). я добавил код здесь
final StorageReference storRef = storageReference.child("profilePicture/"+ UUID.randomUUID().toString());
storRef.putFile(userProfileUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
storRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//Log.d(TAG,"user profile url is: "+uri.toString());
saveEmailToFirebase(uri.toString());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG,"on download porfileuri failed"+e.getMessage());
Toast.makeText(LoginActivity.this, "profile picture uploading failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(LoginActivity.this, "profile picture uploading failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
Log.d(TAG,"File uploading "+(int)progress+"%");
}
});
}else {
Toast.makeText(LoginActivity.this,"Please select Profile picture",Toast.LENGTH_SHORT).show();
}
Использование:
new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name
Далеко будьте этим, чтобы я не согласился со Стрельбой по тарелочкам, но я всегда использовал
Path.GetFileNameWithoutExtension(@"C:\temp\temp2\foo\bar.txt")
, я подозреваю, что FileInfo на самом деле касается файловой системы для получения, это - информация, где, поскольку я ожидал бы, что GetFileNameWithoutExtension является только строковыми операциями - таким образом, производительность одной по другому могла бы быть лучше.
I had an occasion when I was looping through parent child directories
string[] years = Directory.GetDirectories(ROOT);
foreach (var year in years)
{
DirectoryInfo info = new DirectoryInfo(year);
Console.WriteLine(info.Name);
Console.WriteLine(year);
//Month directories
string[] months = Directory.GetDirectories(year);
foreach (var month in months)
{
Console.WriteLine(month);
//Day directories
string[] days = Directory.GetDirectories(month);
foreach (var day in days)
{
//checkes the files in the days
Console.WriteLine(day);
string[] files = Directory.GetFiles(day);
foreach (var file in files)
{
Console.WriteLine(file);
}
}
}
}
using this line I was able to get only the current directory name
DirectoryInfo info = new DirectoryInfo(year);
Console.WriteLine(info.Name);
Это будет зависеть от того, как вы хотите обрабатывать данные, но другой вариант - использовать String.Split.
string myStr = @"C:\foo\bar.txt";
string[] paths = myStr.Split('\\');
string dir = paths[paths.Length - 2]; //returns "foo"
Это не проверяет исключение массива вне границ, но вы поняли.
Я думаю, что самое простое решение -
DirectoryInfo dinfo = new DirectoryInfo(path); string folderName= dinfo.Parent.Name;