Моя проблема была немного другой. Я все сделал правильно. Но я унаследовал неправильный класс для действия, в котором размещен фрагмент.
Для ясности, если вы переопределяете onCreateOptionsMenu(Menu menu, MenuInflater inflater)
во фрагменте, убедитесь, что ваш класс активности, в котором размещен этот фрагмент, наследует android.support.v7.app.ActionBarActivity
(на случай, если вы захотите поддерживать ниже уровня API 11).
Я унаследовал android.support.v4.app.FragmentActivity
для поддержки уровня API ниже 11.
Вот что я придумал:
SELECT zr, min_distance
FROM (SELECT zr, min_distance, cnt,
row_number() over(PARTITION BY zr ORDER BY min_distance) rnk
FROM (SELECT zr.zip zr, zipdistance(zr.zip, za.zip) min_distance,
COUNT(za.locations) over(
PARTITION BY zr.zip
ORDER BY zipdistance(zr.zip, za.zip)
) cnt
FROM zips_required zr
CROSS JOIN zips_available za)
WHERE cnt >= :N)
WHERE rnk = 1
zip_required
вычислите расстояние до zip_available
и отсортируйте их по расстоянию zip_required
счетчик
с диапазоном
позволяет узнать, сколько zip_availables
находится в радиусе этого расстояния. Я использовал для создания примеров данных:
INSERT INTO zips_required
SELECT to_char(10000 + 100 * ROWNUM) FROM dual CONNECT BY LEVEL <= 5;
INSERT INTO zips_available
(SELECT to_number(zip) + 10 * r, 100 - 10 * r FROM zips_required, (SELECT ROWNUM r FROM dual CONNECT BY LEVEL <= 9));
CREATE OR REPLACE FUNCTION zipdistance(zipfrom VARCHAR2,zipto VARCHAR2) RETURN NUMBER IS
BEGIN
RETURN abs(to_number(zipfrom) - to_number(zipto));
END zipdistance;
/
Примечание: вы использовали COUNT (местоположения) и SUM (местоположения) в своем вопросе, я предположил, что это COUNT (местоположения )
Хотя в вашем вопросе кодировка установлена как UTF-16, у вас нет правильного экранирования строки, поэтому я не был уверен, действительно ли вы правильно сделали переставьте строку в свой вопрос.
Я столкнулся с тем же исключением:
System.Xml.XmlException: данные в корневой уровень недействителен. Линия 1, позиция 1.
Однако мой код выглядел так:
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<event>This is a Test</event>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
Проблема в том, что строки хранятся внутри как UTF-16 в .NET, однако кодировка, указанная в заголовке XML-документа, может отличаться. Например:
<?xml version="1.0" encoding="utf-8"?>
Из документации MSDN для String здесь :
Каждый символ Unicode в строке определяется скалярным значением Unicode, также называется кодовой точкой Unicode или порядковое (числовое) значение Символ Юникода. Каждая кодовая точка закодировано с использованием кодировки UTF-16, а числовое значение каждого элемента кодировка представлена символом Char объект.
Это означает, что когда вы передаете XmlDocument.LoadXml () свою строку с заголовком XML, она должна указывать кодировку UTF-16. В противном случае фактическая базовая кодировка не будет соответствовать кодировке, указанной в заголовке, и приведет к возникновению исключения XmlException.
Решение этой проблемы состоит в том, чтобы убедиться, что кодировка используется во всем, что вы передаете Метод Load или LoadXml соответствует тому, что вы говорите в заголовке XML. В моем примере выше либо измените заголовок XML на UTF-16, либо закодируйте ввод в UTF-8 и используйте один из методов XmlDocument.Load .
Ниже приведен пример кода, демонстрирующий, как используйте MemoryStream для создания XmlDocument с использованием строки, которая определяет XML-документ в кодировке UTF-8 (но, конечно, хранится строка UTF-16 .NET).
Я решил ту же проблему, создав подмножество ZIP-архивов в пределах квадратного радиуса от заданного zip (простая математика: <или> NSWE radius) , затем перебирая каждую запись в подмножестве, чтобы увидеть, находится ли она в пределах необходимого радиуса. Работал как шарм и работал очень быстро.