【问题标题】:Xamarin C#: can't send List<int> through an intentXamarin C#:无法通过意图发送 List<int>
【发布时间】:2016-12-12 22:18:10
【问题描述】:

我有一个问题,我真的很摸不着头脑。我刚开始尝试在 Visual Studio 中使用 Xamarin 制作一个 android 应用程序,并且我正在尝试将 List&lt;int&gt; 传递给一个带有 Intent 的新活动。这是我的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&lt;int&gt;' to 'System.Collections.Generic.IList&lt;Java.Lang.Integer&gt;'

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

【问题讨论】:

  • 试试 savedCounters.ToArray()

标签: java c# android android-intent xamarin


【解决方案1】:

使用Java.Lang.Integer 创建一个通用C# List&lt;T&gt;,并且可以通过PutIntegerArrayListExtra 分配给Intent

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

在构造Intent 时,您正在通过C# 对象及其包装器与基于Java 的对象进行交互,因此在两个VM 上具有两个“对等”对象,即Art/Dalvik 和Mono。所以,是的,Java 规则适用于该对象,但有内置的转换......

【讨论】:

    【解决方案2】:

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

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

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

    然后您可以将其转换回您的列表,如下所示:

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

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 1970-01-01
      • 2010-12-16
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多