Если вы хотите составить список / массив целых чисел, то самый простой способ сделать это - принять список строк, разделенных запятыми (,), и преобразовать его в список целых чисел. Не забудьте упомянуть [FromUri] attriubte.your url похож на :
...? ID = 71 и accountID = 1,2,3,289,56
public HttpResponseMessage test([FromUri]int ID, [FromUri]string accountID)
{
List<int> accountIdList = new List<int>();
string[] arrAccountId = accountId.Split(new char[] { ',' });
for (var i = 0; i < arrAccountId.Length; i++)
{
try
{
accountIdList.Add(Int32.Parse(arrAccountId[i]));
}
catch (Exception)
{
}
}
}
Если вы посмотрите документы для View.post
, то найдете некоторую соответствующую информацию:
Этот метод может вызываться извне потока пользовательского интерфейса только в том случае, если это представление прикреплено. к окну.
Поскольку вы делаете это в onCreate
, вполне вероятно, что иногда ваш View
еще не будет прикреплен к окну. Вы можете проверить это, переопределив onAttachedToWindow
и поместив что-то в журналы, а также войдя в систему при публикации. Вы увидите, что когда сообщение не удается, почтовый звонок происходит раньше onAttachedToWindow
.
Как уже упоминали другие, вы можете использовать Activity.runOnUiThread
или предоставить свой собственный обработчик. Однако, если вы хотите сделать это непосредственно из самого View
, вы можете просто получить обработчик View
:
view.getHandler().post(...);
Это особенно полезно, если у вас есть пользовательское представление, включающее некоторые вид фоновой загрузки. Есть также дополнительный бонус: нет необходимости создавать новый отдельный обработчик.
Думаю, проблема в том, что вы обновляете пользовательский интерфейс (ImageView) с помощью отдельного потока, который не является потоком пользовательского интерфейса. Пользовательский интерфейс может быть обновлен только потоком пользовательского интерфейса.
Вы можете решить эту проблему с помощью обработчика :
Handler uiHandler;
public void onCreate(){
...
uiHandler = new Handler(); // This makes the handler attached to UI Thread
...
}
Затем замените:
if ( !img.post(new Runnable() {
на
uiHandler.post(new Runnable() {
, чтобы убедиться, что изображение обновлено в потоке пользовательского интерфейса.
Обработчик - довольно запутанная концепция, я также потратил часы на изучение, чтобы по-настоящему понять это;)
Используйте следующий код, можете опубликовать свой код в MainThread в любое время в любом месте, но это не зависит от Context
или Activity
. Это может предотвратить view.getHandler()
неудачу или утомительные onAttachedToWindow()
вещи и т. Д.
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//TODO
}
});