Xamarin C#:无法通过intent发送List <int>

时间:2016-12-12 22:18:11

标签: java c# android android-intent xamarin

我遇到了一个问题,我真的很难过。我刚刚开始尝试在Visual Studio中使用Xamarin创建一个Android应用程序,并且我正在尝试使用Intent将List<int>传递给新活动。这是我的MainActivity.cs代码。

using Android.App;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using Android.Views;
using Android.Content;

namespace adrd_count {
    [Activity(Label = "adrd_count", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : ListActivity {

        static readonly List<int> savedCounters = new List<int>();


        protected override void OnCreate(Bundle bundle) {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            // SetContentView (Resource.Layout.Main);

            savedCounters.Add(3);
            savedCounters.Add(2342);
            savedCounters.Add(-122211);
            savedCounters.Add(9);
            savedCounters.Add(1941);

            ListAdapter = new ArrayAdapter<int>(this, Android.Resource.Layout.SimpleListItem1, savedCounters);



        }

        protected override void OnListItemClick(ListView l, View v, int position, long id) {
            var t = savedCounters[position];
            var intent = new Intent(this, typeof(Counter));
            intent.PutIntegerArrayListExtra("saved_counter", savedCounters);

            StartActivity(intent);
        }
    }
}

现在让我感到困惑的是这一行:

intent.PutIntegerArrayListExtra("saved_counter", savedCounters);

给我这个错误:

Argument 2: cannot convert from 'System.Collections.Generic.List<int>' to 'System.Collections.Generic.IList<Java.Lang.Integer>'

因为据我所知,我用C#编码...而不是Java。据我所知,在C#中没有像Integer这样的东西,超越语言障碍的错误让我觉得我做的事情非常糟糕。我只是错误地阅读了吗?我一直在用Java编程吗?我该怎么办?

2 个答案:

答案 0 :(得分:0)

使用List<T>创建通用C#Java.Lang.Integer,并通过Intent分配给PutIntegerArrayListExtra

var intList = new List<Integer>() { (Integer)0, (Integer)1 };
~~~~
intent.PutIntegerArrayListExtra("saved_counter", intList);

构造Intent时,您通过C#对象及其包装器与基于Java的对象进行交互,因此有两个&#34; peer&#34;两个虚拟机上的对象,Art / Dalvik和Mono。所以,是的,Java规则适用于该对象,但内置了转换....

答案 1 :(得分:0)

您可以使用C#Json.Net将List或任何对象作为意图传递。

可以使用JSON.Net将任何对象序列化为字符串(json字符串)

string listAsString = JsonConvert.SerializeObject(item);
intent.PutExtra ("saved_counter", listAsString);

然后您可以将其转换回您的列表&lt;&gt;如下:

string listAsString = Intent.GetStringExtra ("saved_counter");
List<Integer> savedCounter JsonConvert.DeserializeObject<List<Integer>> (listAsString);