我正在使用 yahoo Finance api 将货币数据提取到我的 android 应用程序中。我正在开发一个转换器应用程序。我的问题是 - 当没有连接时,我的应用程序被强制停止或崩溃,即引发了一些异常,但我无法放置代码来处理这些异常。我试过但我失败了。我请求你们帮助我。这是下面给出的代码 -
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);
toSpin_currency.setAdapter(adapterC);
spin_currency.setOnItemSelectedListener(new spinOne(1));
toSpin_currency.setOnItemSelectedListener(new spinOne(2));
btnConv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* if (etInput.getText().toString().trim().length() > 0) {
double cur = Double.parseDouble(etInput.getText().toString()); */
if (from == to) {
Toast.makeText(getApplicationContext(), "Invalid conversion", Toast.LENGTH_LONG).show();
etOutput.setText(null);
} else {
new DownloadData().execute();
}
}
});
}
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();
}
@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();
}
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", 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);
}
}
}
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
}
}