首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android类变量未及时赋值setOnItemSelectedListener

Android类变量未及时赋值setOnItemSelectedListener
EN

Stack Overflow用户
提问于 2018-06-04 02:20:15
回答 1查看 31关注 0票数 1

我正在编写一个货币转换器应用程序,并使用Volley请求向API发送请求以检索转换率。

我现在有两个旋转器(从货币和目标货币)。我有三个函数,一个用于将项添加到微调程序,一个用于在按下按钮时添加侦听器,另一个用于发送volley请求以检索JSON信息。

我相信我调用函数的顺序是正确的,但是似乎由于某种原因,toSpinnerTextfromSpinnerText的值没有被设置为微调函数的值。在我看来,它们应该在发送对url的请求之前设置,因为我在jsonSendRequest()之前调用了addItemsOnToSpinner()。但是当我调试日志调用时,当构造url字符串时,toSpinnerTextfromSpinnerText的值仍然是空字符串。

这是我到目前为止所拥有的。谢谢。

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

RequestQueue rq;
Double conversionDouble;

Spinner toSpinner, fromSpinner;
String toSpinnerText = "";
String fromSpinnerText = "";
private Button convertBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addItemsOnToSpinner();
    addListenerOnButton();
    jsonSendRequest();

    Button convertBtn = (Button) findViewById(R.id.convertBtn);
    final EditText fromAmountEditText = findViewById(R.id.fromAmountEditText);

    convertBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TextView toAmountTextView = findViewById(R.id.toAmountTextView);
            DecimalFormat percentageFormat = new DecimalFormat("0.00");
            Double fromAmount = Double.parseDouble(fromAmountEditText.getText().toString());
            String result = "$" + percentageFormat.format(conversionDouble*fromAmount);
            toAmountTextView.setText(result);
        }
    });
    rq = Volley.newRequestQueue(this);

}

public void jsonSendRequest() {

    RequestQueue queue = Volley.newRequestQueue(this);
    // String url = "http://free.currencyconverterapi.com/api/v3/convert?q=CAD_USD&compact=ultra";
    String url = "http://free.currencyconverterapi.com/api/v3/convert?q=" + fromSpinnerText + "_" + toSpinnerText  + "&compact=ultra";

    // Request a string response
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    JSONObject jsonobject = null;
                    try {
                        jsonobject = new JSONObject(response);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    if (jsonobject.has(fromSpinnerText + "_" + toSpinnerText)) {
                        try {
                            conversionDouble = jsonobject.getDouble(fromSpinnerText + "_" + toSpinnerText);
                            // conversionDouble = jsonobject.getDouble(fromSpinnerText + "_" + toSpinnerText);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });

// Add the request to the RequestQueue.
    queue.add(stringRequest);
}

public void addItemsOnToSpinner(){

    Spinner toSpinner = (Spinner) findViewById(R.id.toSpinner);
    Spinner fromSpinner = (Spinner) findViewById(R.id.fromSpinner);

    List<String> currency = new ArrayList<String>();
    currency.add("USD");
    currency.add("CAD");
    currency.add("CNY");

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(
     this, android.R.layout.simple_spinner_item, currency
    );

    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


    toSpinner.setAdapter(dataAdapter);
    fromSpinner.setAdapter(dataAdapter);

    fromSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String fromSpinnerText = (String) parent.getItemAtPosition(position);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    toSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String toSpinnerText = (String) parent.getItemAtPosition(position);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

}

public void addListenerOnButton() {

    Spinner fromSpinner = (Spinner) findViewById(R.id.fromSpinner);
    Spinner toSpinner = (Spinner) findViewById(R.id.toSpinner);
    Button convertBtn = (Button) findViewById(R.id.convertBtn);

}

}
EN

回答 1

Stack Overflow用户

发布于 2018-06-04 02:23:43

如果你为它创建了一个新的局部变量,你将如何在fromSpinnerText中选择项。您将所选值存储到一个局部变量中,而不是在activity顶部创建的全局变量中。

替换

代码语言:javascript
复制
String fromSpinnerText = (String) parent.getItemAtPosition(position);

代码语言:javascript
复制
fromSpinnerText = (String) parent.getItemAtPosition(position);

并替换

代码语言:javascript
复制
String toSpinnerText = (String) parent.getItemAtPosition(position);

代码语言:javascript
复制
toSpinnerText = (String) parent.getItemAtPosition(position);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50669590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档