首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义ImagePicker MainActivity实例

未定义ImagePicker MainActivity实例
EN

Stack Overflow用户
提问于 2019-06-08 22:44:32
回答 2查看 726关注 0票数 1

按照下面的链接添加ImagePicker

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/photo-picker

在这里,对于Android实现,问题是MainActivity.cs中没有定义实例

代码语言:javascript
复制
[assembly: Dependency(typeof(PicturePickerImplementation))]

namespace DependencyServiceSample.Droid
{
    public class PicturePickerImplementation : IPicturePicker
    {
        public Task<Stream> GetImageStreamAsync()
        {
            // Define the Intent for getting images
            Intent intent = new Intent();
            intent.SetType("image/*");
            intent.SetAction(Intent.ActionGetContent);

            // Start the picture-picker activity (resumes in MainActivity.cs)
            MainActivity.Instance.StartActivityForResult(
                Intent.CreateChooser(intent, "Select Picture"),
                MainActivity.PickImageId);

            // Save the TaskCompletionSource object as a MainActivity property
            MainActivity.Instance.PickImageTaskCompletionSource = new TaskCompletionSource<Stream>();

            // Return Task object
            return MainActivity.Instance.PickImageTaskCompletionSource.Task;
        }
    }
}

而MainActivity没有实例字段,有没有其他方法来获取实例?

代码语言:javascript
复制
public class MainActivity : FormsAppCompatActivity
{
    ...
    // Field, property, and method for Picture Picker
    public static readonly int PickImageId = 1000;

    public TaskCompletionSource<Stream> PickImageTaskCompletionSource { set; get; }

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
    {
        base.OnActivityResult(requestCode, resultCode, intent);

        if (requestCode == PickImageId)
        {
            if ((resultCode == Result.Ok) && (intent != null))
            {
                Android.Net.Uri uri = intent.Data;
                Stream stream = ContentResolver.OpenInputStream(uri);

                // Set the Stream as the completion of the Task
                PickImageTaskCompletionSource.SetResult(stream);
            }
            else
            {
                PickImageTaskCompletionSource.SetResult(null);
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-08 22:52:12

MainActivity类中添加以下内容:

代码语言:javascript
复制
 internal static MainActivity Instance { get; private set; }

文档很可能缺少这一点。

票数 2
EN

Stack Overflow用户

发布于 2019-06-08 22:52:51

缺少静态变量定义及其赋值。

MainActivity类添加一个名为Instance的静态变量:

代码语言:javascript
复制
public static Activity Instance;

然后在OnResume覆盖中指定它:

代码语言:javascript
复制
protected override void OnResume()
{
    Instance = this;
    base.OnResume();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56507397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档