Я работаю над приложением финансов, где я Наполнение значение обмена currecny с помощью Yahoo Finance Api и вот моя реализацияобъект Spinner не принимает второй вход раз в процесс выполняется
void currency_widget() {
from.setAdapter(new CurrencyListAdapter(getActivity(), R.layout.country_list_item, recourseList));
from.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String m = (String) Array.get(recourseList, i);
String[] ma = m.split(",");
Locale locale = new Locale("en_US", ma[1]);
c2 = Currency.getInstance(locale);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
to.setAdapter(new CurrencyListAdapter(getActivity(), R.layout.country_list_item, recourseList));
to.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String m = (String) Array.get(recourseList, i);
String[] ma = m.split(",");
Locale locale = new Locale("en_US", ma[1]);
c1 = Currency.getInstance(locale);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
public class connection extends AsyncTask {
@Override
protected Object doInBackground(Object... arg0) {
connect();
return null;
}
private void connect() {
try {
String as = c2 + "" + c1 + "=" + "X";
// FxQuote ab=YahooFinance.getFx(FxSymbols.)
FxQuote usdeur = null;
try {
usdeur = YahooFinance.getFx(as);
edittxt.setText("" + usdeur);
} catch (Exception e) {
e.printStackTrace();
edittxt.setText("No Internet Connection");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
В I имеют два объекта spinner, который позволяет пользователю выбирать желаемую валюту. from
- это первый объект-обтекатель, а to
- второй объект-обтекатель.
До сих пор все работает нормально, как ожидалось. Проблема возникает, когда я нажимаю на кнопку получить и выполнить операцию
get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new connection().execute(); //TODO Spinner won't take second time input
}
});
Он отображает значение тоже, но если я пытаюсь изменить элементы счетчик во второй раз он не отражает ничего т.е. позволяет сказать, что я нажал на блесны и выпадающее меню появилось, но и я изменил значение, но оно не будет отображаться элемент процесса выбора делается и кнопка выпадающий закрыта, следовательно, элементы обтекателя втулки фиксируют к первой позиции
Решено
Изменен код согласно полученному ответу, и она работала
@Override
protected Object doInBackground(Object... arg0) {
// connect();
String as = c2 + "" + c1 + "=" + "X";
// FxQuote usdeur = YahooFinance.getFx(as);
return YahooFinance.getFx(as);
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
try {
edittxt.setText("" + o);
} catch (Exception e) {
e.printStackTrace();
edittxt.setText("No Internet Connection");
}
}
сэр, я понимаю, что вы говорите, но мы выполняем, что, когда мы возвращаем что-либо из 'doInBackground()', но здесь я совершаю все в 'doInBackground() ', я дам ему попробовать, решение, которое вы предложили, и сообщит вам об этом – silverFoxA
, поскольку' doInBackground() 'работает в фоновом потоке. Когда вы меняете свое значение «Spinner» во второй раз, снова он работает в другом потоке, пока, возможно, работает первый. Просто дайте ему попробовать, bcs, вероятно, это то, что он вызывает. – hrskrs
Я думаю, что hrskrs прав, проверьте эту ссылку http://developer.android.com/reference/android/os/AsyncTask.html первый код показывает вам, как использовать метод postExecute. – Aebsubis