Xamarin android-尝试对空对象引用调用虚拟方法sendBroadcast()
我正在使用Xamarin构建一个跨平台应用程序,我的应用程序将从互联网下载视频,我已经完成了下载和保存功能,但在将视频保存到DCIM(android)后,视频不会出现在多媒体资料中。在互联网上搜索解决方案一天之后,我想出了两个解决方案: 1.下载完成后:发送带有“Intent.ActionMediaMounted”操作的广播 2.下载完成后,调用“MediaScannerConnection.ScanFile” 对于解决方案1,我得到: “{Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.content.Context.sendBroadcast(android.content.Intent)'” 对于解决方案2,我得到: “{Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法'boolean android.content.Context.bindService(android.content.Intent,android.content.ServiceConnection,int)}” 这是我的界面,我用来处理PLC项目中的下载:Xamarin android-尝试对空对象引用调用虚拟方法sendBroadcast(),xamarin,xamarin.android,Xamarin,Xamarin.android,我正在使用Xamarin构建一个跨平台应用程序,我的应用程序将从互联网下载视频,我已经完成了下载和保存功能,但在将视频保存到DCIM(android)后,视频不会出现在多媒体资料中。在互联网上搜索解决方案一天之后,我想出了两个解决方案: 1.下载完成后:发送带有“Intent.ActionMediaMounted”操作的广播 2.下载完成后,调用“MediaScannerConnection.ScanFile” 对于解决方案1,我得到: “{Java.Lang.NullPointerExcept
namespace VideoDownloader
{
public interface IDownloadState
{
void OnDownloadStarted();
void OnDownloadError();
void OnDownloadFinished(string path);
}
}
namespace VideoDownloader
{
public partial class MainPage : TabbedPage
{
public MainPage()
{
InitializeComponent();
}
public void downloadVideo(VideoInfor video, bool isRetried)
{
//download code here...
DependencyService.Get<IDownloadState()
.OnDownloadFinished(video.path);
}
}
}
这是我在PLC项目中的MainPage.xaml.cs:
namespace VideoDownloader
{
public interface IDownloadState
{
void OnDownloadStarted();
void OnDownloadError();
void OnDownloadFinished(string path);
}
}
namespace VideoDownloader
{
public partial class MainPage : TabbedPage
{
public MainPage()
{
InitializeComponent();
}
public void downloadVideo(VideoInfor video, bool isRetried)
{
//download code here...
DependencyService.Get<IDownloadState()
.OnDownloadFinished(video.path);
}
}
}
我知道android在stackoverflow上有很多类似的问题,但他们似乎一点也不喜欢我的情况。有人知道我做错了什么吗?为什么会这样
对于解决方案2,我得到:
“{Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法'boolean android.content.Context.bindService(android.content.Intent,android.content.ServiceConnection,int)}”
请尝试在OnDownloadFinished()
中使用Forms.Context
而不是this
。
例如:
public void OnDownloadFinished(string path)
{
//Intent intent = new Intent(Intent.ActionMediaMounted);
//SendBroadcast(intent);
//throw new NotImplementedException();
MediaScannerConnection.ScanFile(Forms.Context, new String[] {
Android.OS.Environment
.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim)
.AbsolutePath }, null, null);
}
@user2905416您是否尝试过清理和重建?或者尝试在真实的手机上运行它。我现在可以调试我的项目,这是因为在我的visual studio中禁用了调试,并且我尝试了您的解决方案“用Forms.Context替换此”“错误消失了,但当我打开gallery时,下载到DCIM文件夹的视频不在那里,您对android上的gallery能够显示下载的视频文件有什么建议吗?@user2905416您确定您的视频已下载吗?”?你能提供一个演示项目吗?@Billy Liu-MSFT:我肯定视频已经下载了,因为我正在使用“Es file explorer file manager”管理我的android模拟器上的文件和文件夹。如何向你提供我的演示项目?APK文件?@user2905416您可以将项目上传到Github并给我链接