Следующие работали для меня. Просто добавьте следующий фрагмент:
android {
compileSdkVersion 25
buildToolsVersion '25.0.1'
defaultConfig {
applicationId "yourpackage"
minSdkVersion 10
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
}
Никакое преступление тем, кто предоставил четкие ответы, но многих людей, кажется, не отвечает на Ваш вопрос вместо того, чтобы решить Вашу проблему. Вы хотите несколько идентификаторов, таким образом, Вы думаете, что могли это это:
http://example.com/mypage.aspx?IDs=1234,4321,6789
Проблема состоит в том, что это - ненадежное решение. В будущем, если Вы хотите несколько значений, что Вы делаете, если у них есть запятые? Лучшее решение (и это совершенно допустимо в строке запроса), должен использовать несколько параметров с тем же именем:
http://example.com/mypage.aspx?ID=1234;ID=4321;ID=6789
Затем независимо от того, что синтаксический анализатор строки запроса, который Вы используете, должен смочь возвратить список идентификаторов. Если это не может обработать это (и также обработать точки с запятой вместо амперсандов), то это повреждается.
Что-то вроде этого могло бы работать:
public static IList<int> GetIdListFromString(string idList)
{
string[] values = idList.Split(',');
List<int> ids = new List<int>(values.Length);
foreach (string s in values)
{
int i;
if (int.TryParse(s, out i))
{
ids.Add(i);
}
}
return ids;
}
Который затем использовался бы:
string intString = "1234,4321,6789";
IList<int> list = GetIdListFromString(intString);
foreach (int i in list)
{
Console.WriteLine(i);
}
Можно инстанцировать Списка <T> от массива.
VB.NET:
Dim lstIDs as new List(of Integer)(ids.split(','))
Это подвержено кастингу ошибок хотя, если массив содержит немеждународные элементы
Все, о чем я могу думать, должно циклично выполниться по списку строк (который Вы имеете от выполнения разделения), и выполнение чего-то как int.TryParse()
на них один за другим и помещении их в новое List<int>
. Инкапсулируйте его в миленьком вспомогательном методе где-нибудь, и это не будет слишком неприятно.
Если Вам нравится функциональный стиль, можно попробовать что-то как
string ids = "1,2,3,4,5";
List<int> l = new List<int>(Array.ConvertAll(
ids.Split(','), new Converter<string, int>(int.Parse)));
Никакие лямбды, но у Вас действительно есть Преобразователи и Предикаты и другие хорошие вещи, которые могут быть сделаны из методов.
Я вижу, что мой ответ появился довольно поздно, т.е. несколько другой записал то же. Поэтому я представляю альтернативную методику с помощью регулярных выражений, чтобы проверить и разделить строку.
class Program
{
//Accepts one or more groups of one or more digits, separated by commas.
private static readonly Regex CSStringPattern = new Regex(@"^(\d+,?)*\d+$");
//A single ID inside the string. Must only be used after validation
private static readonly Regex SingleIdPattern = new Regex(@"\d+");
static void Main(string[] args)
{
string queryString = "1234,4321,6789";
int[] ids = ConvertCommaSeparatedStringToIntArray(queryString);
}
private static int[] ConvertCommaSeparatedStringToIntArray(string csString)
{
if (!CSStringPattern.IsMatch(csString))
throw new FormatException(string.Format("Invalid comma separated string '{0}'",
csString));
List<int> ids = new List<int>();
foreach (Match match in SingleIdPattern.Matches(csString))
{
ids.Add(int.Parse(match.Value)); //No need to TryParse since string has been validated
}
return ids.ToArray();
}
}
разделение является первой вещью, которая приходит на ум, но это возвращает массив, не Список; Вы могли попробовать что-то как:
List<int> intList = new List<int>;
foreach (string tempString in ids.split(',')
{
intList.add (convert.int32(tempString));
}
Заключительный фрагмент кода, который берет то, что я надеюсь, лучше всего из всех предложений:
Function GetIDs(ByVal IDList As String) As List(Of Integer)
Dim SplitIDs() As String = IDList.Split(new Char() {","c}, StringSplitOptions.RemoveEmptyEntries)
GetIDs = new List(Of Integer)(SplitIDs.Length)
Dim CurID As Integer
For Each id As String In SplitIDs
If Integer.TryParse(id, CurID) Then GetIDs.Add(CurID)
Next id
End Function
Я надеялся смочь сделать это в одной или двух встроенных строках кода. Одна строка, чтобы создать массив строк и надо надеяться найти что-то в платформе, которую я уже не знал для обработки импорта его к Списку <интервал>, который мог обработать бросок разумно. Но если я должен переместить его в метод затем, я буду. И да, я использую VB. Я просто предпочитаю C# для того, чтобы задать вопросы, потому что они получат более многочисленную аудиторию, и я примерно как быстрый.
Можно использовать строку. Разделение () для разделения значений, после того как Вы извлекли их из URL.
string[] splitIds = ids.split(',');
Вы будете просто иметь к foreach через них и интервал. TryParse каждый из них. после этого просто добавьте к списку.
Nevermind - @Splash бьют меня к нему
List<int> convertIDs = new List<int>;
string[] splitIds = ids.split(',');
foreach(string s in splitIds)
{
convertIDs.Add(int.Parse(s));
}
Для полноты Вы захотите поместить попытку/выгоды вокруг для цикла (или вокруг международного Синтаксического анализа () вызов) и обработать ошибку на основе Ваших требований. Можно также сделать tryparse () как так:
List<int> convertIDs = new List<int>;
string[] splitIds = ids.split(',');
foreach(string s in splitIds)
{
int i;
int.TryParse(out i);
if (i != 0)
convertIDs.Add(i);
}
Продолжать предыдущий ответ, вполне просто выполняющий итерации через массив, возвращенный Разделением и преобразовывающий в новый массив ints. Этот образец ниже в C#:
string[] splitIds = stringIds.Split(',');
int[] ids = new int[splitIds.Length];
for (int i = 0; i < ids.Length; i++) {
ids[i] = Int32.Parse(splitIds[i]);
}
Я думаю, что самый легкий путь состоит в том, чтобы разделить как показано прежде, и затем цикл через значения и попытаться преобразовать в интервал.
class Program
{
static void Main(string[] args)
{
string queryString = "1234,4321,6789";
int[] ids = ConvertCommaSeparatedStringToIntArray(queryString);
}
private static int[] ConvertCommaSeparatedStringToIntArray(string csString)
{
//splitting string to substrings
string[] idStrings = csString.Split(',');
//initializing int-array of same length
int[] ids = new int[idStrings.Length];
//looping all substrings
for (int i = 0; i < idStrings.Length; i++)
{
string idString = idStrings[i];
//trying to convert one substring to int
int id;
if (!int.TryParse(idString, out id))
throw new FormatException(String.Format("Query string contained malformed id '{0}'", idString));
//writing value back to the int-array
ids[i] = id;
}
return ids;
}
}