繁体   English   中英

Android Java-解析JSON时获取空对象引用

[英]Android Java - Getting a null object reference when parsing JSON

我正在尝试使用Volley解析此JSON URL中的值,但是我从响应中返回了空值: http : //free.currencyconverterapi.com/api/v3/convert?q=CAD_USD&compact=ultra

{"CAD_USD":0.78246}

我要做的就是在textview中显示JSON的值。

我得到的错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'double java.lang.Double.doubleValue()'

我不确定我是否正确获取JSON数据。 到目前为止,我有:

public class MainActivity extends AppCompatActivity {

    RequestQueue rq;
    Double conversionDouble;
    String url = "http://free.currencyconverterapi.com/api/v3/convert?q=CAD_USD&compact=ultra";

    private Spinner toSpinner, fromSpinner;
    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);
                String result = Double.toString(conversionDouble);
                toAmountTextView.setText(result);
            }
        });

        Spinner toSpinner = (Spinner) findViewById(R.id.toSpinner);
        Spinner fromSpinner = (Spinner) findViewById(R.id.fromSpinner);
        String toSpinnerText = toSpinner.getSelectedItem().toString();
        String fromSpinnerText = fromSpinner.getSelectedItem().toString();

        rq = Volley.newRequestQueue(this);

    }

    public void jsonSendRequest() {
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    conversionDouble = response.getDouble("CAD_USD");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
    }

    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);
    }

    public void addListenerOnButton() {

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

}

任何帮助表示赞赏。

//Replace your method with below
public void jsonSendRequest() {
      RequestQueue queue = Volley.newRequestQueue(this);
     String url ="http://free.currencyconverterapi.com/api/v3/convert?q=CAD_USD&compact=ultra";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
        new Response.Listener<String>() {
@Override
public void onResponse(String response) {
      JSONObject jsonobject = new JSONObject(response);
      if(jsonobject.has("CAD_USD")){
          conversionDouble = jsonobject.getDouble("CAD_USD");
      }
    }
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
});

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM