2015-05-11 5 views
3

Я работаю над приложением финансов, где я Наполнение значение обмена 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"); 
     } 
    } 

ответ

1

Я не проверил весь код, но я видел, что вы звоните

edittxt.setText("No Internet Connection"); на doInBackground(), что неправильно.

Вы должны setText по телефону postExecute(), который работает на UI-Thread.

Вернуться usdeur на doInBackground() и setText на postExecute()

+0

сэр, я понимаю, что вы говорите, но мы выполняем, что, когда мы возвращаем что-либо из 'doInBackground()', но здесь я совершаю все в 'doInBackground() ', я дам ему попробовать, решение, которое вы предложили, и сообщит вам об этом – silverFoxA

+1

, поскольку' doInBackground() 'работает в фоновом потоке. Когда вы меняете свое значение «Spinner» во второй раз, снова он работает в другом потоке, пока, возможно, работает первый. Просто дайте ему попробовать, bcs, вероятно, это то, что он вызывает. – hrskrs

+0

Я думаю, что hrskrs прав, проверьте эту ссылку http://developer.android.com/reference/android/os/AsyncTask.html первый код показывает вам, как использовать метод postExecute. – Aebsubis

Смежные вопросы