解析 - 即使处理了异常,也不会在textView上显示值

时间:2016-03-02 17:51:53

标签: android parsing converter

我正在使用yahoo finance api以下列方式处理货币转换器 -

 public void Currency() {
    spin_currency = (Spinner) findViewById(R.id.myspin);
    toSpin_currency = (Spinner) findViewById(R.id.myspin1);

    ArrayAdapter<CharSequence> adapterC = ArrayAdapter.createFromResource(this, R.array.name,
            android.R.layout.simple_spinner_item);
    adapterC.setDropDownViewResource(android.R.layout.select_dialog_singlechoice);
    spin_currency.setAdapter(adapterC);
    spin_currency.setSelection(142);
    toSpin_currency.setAdapter(adapterC);
    toSpin_currency.setSelection(59);
    spin_currency.setOnItemSelectedListener(new spinOne(1));
    toSpin_currency.setOnItemSelectedListener(new spinOne(2));
    cd = new ConnectionDetector(getApplicationContext());
    btnConv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isInternetPresent = cd.isConnectingToInternet();
            if (from == to) {
                Toast.makeText(getApplicationContext(), "Invalid conversion", Toast.LENGTH_LONG).show();
                etOutput.setText(null);
            } else {
                if (isInternetPresent) {

                    new DownloadData().execute();
                } else {

                    // Print message for No Internet Connection !
                    Toast.makeText(getApplicationContext(), "Please check your internet connection", Toast.LENGTH_LONG).show();
                }
            }
       }
    });
}

public String getJson(String url)throws ClientProtocolException, IOException {

    StringBuilder build = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    HttpResponse response = client.execute(httpGet);
    HttpEntity entity = response.getEntity();
    InputStream content = entity.getContent();
    BufferedReader reader = new BufferedReader(new InputStreamReader(content));
    String con;
    while ((con = reader.readLine()) != null) {
        build.append(con);
    }
    return build.toString();
}

class DownloadData extends AsyncTask<Void, Integer, String> {
    ProgressDialog pd = null;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd = new ProgressDialog(Temperature.this);
        pd.setTitle("Converting...");
        pd.setMessage("Please wait...");
        pd.setCancelable(false);
        pd.show();

        long delayInMillis = 10000;
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                pd.dismiss();
            }
        }, delayInMillis);
    }

    @Override
    protected String doInBackground(Void... params) {
        String s;
        String exResult = "";
        final String val[];
        val  = getResources().getStringArray(R.array.value);
            try {
                s = getJson("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22" + val[from] + val[to] + "%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=");
                JSONObject jObj;
                jObj = new JSONObject(s);
                    exResult = jObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate");
                    System.out.println(exResult);
                }catch(JSONException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(ClientProtocolException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(IOException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(NumberFormatException e) {
                e.printStackTrace();
            }
            return exResult;


    }
    @Override
    protected void onPostExecute(String exResult) {
        super.onPostExecute(exResult);
        pd.dismiss();

        System.out.println("theResult:" + exResult);
            if (etInput.getText().toString().trim().length() > 0) {
                if (etInput.getText().toString().equals(".") || etInput.getText().toString().equals("-.") || etInput.getText().toString().equals("-")) {
                    Toast.makeText(getApplicationContext(), "Please enter a valid value to convert", Toast.LENGTH_LONG).show();
                } else {
                        Double cur = Double.parseDouble(etInput.getText().toString());
                        etOutput.setText(String.valueOf(Double.parseDouble(exResult) * cur));
                }
            } else {
                Toast.makeText(getApplicationContext(), "Please enter a valid value", Toast.LENGTH_LONG).show();
                etOutput.setText(null);
        }
    }
    @Override
    protected void onCancelled() {
        pd.dismiss();
        super.onCancelled();
    }
}
private class spinOne implements OnItemSelectedListener {
    int ide;

    spinOne(int i) {
        ide = i;
    }

    public void onItemSelected(AdapterView<?> parent, View view,
                               int index, long id) {
        if (ide == 1)
            from = index;
        else if (ide == 2)
            to = index;

    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
}

但每当我尝试转换时,它都会导致我的应用崩溃。以下是错误日志 -     java.lang.NumberFormatException:无效的double:“”         at java.lang.StringToReal.invalidReal(StringToReal.java:63)         在java.lang.StringToReal.parseDouble(StringToReal.java:248)         在java.lang.Double.parseDouble(Double.java:295)     at com.example.rahulshaw.convotemp.Temperature $ DownloadData.onPostExecute(Temperature.java:327)     at com.example.rahulshaw.convotemp.Temperature $ DownloadData.onPostExecute(Temperature.java:268)     在android.os.AsyncTask.finish(AsyncTask.java:632)     在android.os.AsyncTask.access $ 600(AsyncTask.java:177)     在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:645)     在android.os.Handler.dispatchMessage(Handler.java:102)     在android.os.Looper.loop(Looper.java:136)     在android.app.ActivityThread.main(ActivityThread.java:5113)     at java.lang.reflect.Method.invokeNative(Native Method)     在java.lang.reflect.Method.invoke(Method.java:515)     在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)     在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)     在dalvik.system.NativeStart.main(本地方法)

然后我在上面的代码中使用了以下语句 -

if(!exResult.equals(""){}

现在是 -

 public void Currency() {
    spin_currency = (Spinner) findViewById(R.id.myspin);
    toSpin_currency = (Spinner) findViewById(R.id.myspin1);

    ArrayAdapter<CharSequence> adapterC = ArrayAdapter.createFromResource(this, R.array.name,
            android.R.layout.simple_spinner_item);
    adapterC.setDropDownViewResource(android.R.layout.select_dialog_singlechoice);
    spin_currency.setAdapter(adapterC);
    spin_currency.setSelection(142);
    toSpin_currency.setAdapter(adapterC);
    toSpin_currency.setSelection(59);
    spin_currency.setOnItemSelectedListener(new spinOne(1));
    toSpin_currency.setOnItemSelectedListener(new spinOne(2));
    cd = new ConnectionDetector(getApplicationContext());
    btnConv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isInternetPresent = cd.isConnectingToInternet();
            if (from == to) {
                Toast.makeText(getApplicationContext(), "Invalid conversion", Toast.LENGTH_LONG).show();
                etOutput.setText(null);
            } else {
                if (isInternetPresent) {

                    new DownloadData().execute();
                } else {

                    // Print message for No Internet Connection !
                    Toast.makeText(getApplicationContext(), "Please check your internet connection", Toast.LENGTH_LONG).show();
                }
            }
       }
    });
}

   public String getJson(String url)throws ClientProtocolException, IOException {

    StringBuilder build = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    HttpResponse response = client.execute(httpGet);
    HttpEntity entity = response.getEntity();
    InputStream content = entity.getContent();
    BufferedReader reader = new BufferedReader(new InputStreamReader(content));
    String con;
    while ((con = reader.readLine()) != null) {
        build.append(con);
    }
    return build.toString();
}

class DownloadData extends AsyncTask<Void, Integer, String> {
    ProgressDialog pd = null;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd = new ProgressDialog(Temperature.this);
        pd.setTitle("Converting...");
        pd.setMessage("Please wait...");
        pd.setCancelable(false);
        pd.show();

        long delayInMillis = 10000;
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                pd.dismiss();
            }
        }, delayInMillis);
    }

    @Override
    protected String doInBackground(Void... params) {
        String s;
        String exResult = "";
        final String val[];
        val  = getResources().getStringArray(R.array.value);
            try {
                s = getJson("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22" + val[from] + val[to] + "%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=");
                JSONObject jObj;
                jObj = new JSONObject(s);
                    exResult = jObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate");
                    System.out.println(exResult);
                }catch(JSONException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(ClientProtocolException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(IOException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch(NumberFormatException e) {
                e.printStackTrace();
            }
            return exResult;


    }
    @Override
    protected void onPostExecute(String exResult) {
        super.onPostExecute(exResult);
        pd.dismiss();

        System.out.println("theResult:" + exResult);
            if (etInput.getText().toString().trim().length() > 0) {
                if (etInput.getText().toString().equals(".") || etInput.getText().toString().equals("-.") || etInput.getText().toString().equals("-")) {
                    Toast.makeText(getApplicationContext(), "Please enter a valid value to convert", Toast.LENGTH_LONG).show();
                } else {
                    if(!exResult.equals("")) {
                        Double cur = Double.parseDouble(etInput.getText().toString());
                        etOutput.setText(String.valueOf(Double.parseDouble(exResult) * cur));
                    }
                }
            } else {
                Toast.makeText(getApplicationContext(), "Please enter a valid value", Toast.LENGTH_LONG).show();
                etOutput.setText(null);
        }
    }
    @Override
    protected void onCancelled() {
        pd.dismiss();
        super.onCancelled();
    }
}
private class spinOne implements OnItemSelectedListener {
    int ide;

    spinOne(int i) {
        ide = i;
    }

    public void onItemSelected(AdapterView<?> parent, View view,
                               int index, long id) {
        if (ide == 1)
            from = index;
        else if (ide == 2)
            to = index;

    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
}

现在app停止了崩溃,但它没有在etOutput中显示值。

我该怎么办?我搜索了整个stackoverflow,但没有得到解决方案。我希望我能来到这里。

0 个答案:

没有答案