0

我正在尝试制作一个新应用程序,我想获得股票更新、货币兑换更新等。我已经尝试过 Google Finance API。不使用的原因:已弃用并即将关闭,这将使我的应用程序过时。

然后我转到雅虎财经,发现http://learnandroidfast.blogspot.in/2012/02/yql-open-api.html

这是我的代码:

    /*
     * To convert the InputStream to String we use the
     * BufferedReader.readLine() method. We iterate until the BufferedReader
     * return null which means there's no more data to read. Each line will
     * appended to a StringBuilder and returned as String.
     */
private static String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

/*
 * This is a test function which will connects to a given rest service and
 * prints it's response to Android Log with labels "Praeda".
 */
public static String[] connect(String url) {
    HttpClient httpclient = new DefaultHttpClient();
    String[] str = new String[5];

    // Prepare a request object
    HttpGet httpget = new HttpGet(url);

    // Execute the request
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
        // Examine the response status
        Log.d(TAG, response.getStatusLine().toString());

        // Get hold of the response entity
        HttpEntity entity = response.getEntity();
        // If the response does not enclose an entity, there is no need
        // to worry about connection release

        if (entity != null) {

            // A Simple JSON Response Read
            InputStream instream = entity.getContent();
            String result = convertStreamToString(instream);
            Log.d(TAG, result);

            // A Simple JSONObject Creation
            JSONObject json = new JSONObject(result);
            Log.d(TAG, "<jsonobject>\n" + json.toString()
                    + "\n</jsonobject>");

            // A Simple JSONObject Parsing
            // JSONArray nameArray=json.names();
            // Log.i("query",nameArray.toString());
            // JSONObject query=json.getJSONObject("query");
            // Log.i("query",query.toString());
            // JSONArray results=query.getJSONArray("results");
            // Log.i("rslts",results.toString());
            // JSONArray quote=results.getJSONArray("quote");
            // JSONObject quote=results.getJSONObject("quote");
            // Log.i("quote",quote.toString());
            JSONObject query = json.getJSONObject("query");
            Log.d(TAG, query.toString());
            JSONObject results = query.getJSONObject("results");
            Log.d(TAG, results.toString());
            JSONObject quote = results.getJSONObject("quote");
            Log.d(TAG, quote.toString());
            for (int i = 0; i < quote.length(); i++) {

                // Log.i("Praedafor","<jsonname"+i+">\n"+nameArray.getString(i)+"\n</jsonname"+i+">\n"
                // +"<jsonvalue"+i+">\n"+valArray.getString(i)+"\n</jsonvalue"+i+">");
                // JSONObject quotes = results.getJSONObject(i)
                // .getJSONObject("quote");
                // Log,i
                // Log.i("name",quote.getString("Name"));
                // Log.i("name","pahunch");
                // Log.i("name",quote.getString("Symbol"));

                // Log.i("name",quote.getString("DaysLow"));

                // Log.i("name",quote.getString("DaysHigh"));

                // Log.i("name",quote.getString("Open"));

                // Log.i("name",quote.getString("PreviousClose"));
                String symbol = quote.getString("Symbol");
                str[0] = symbol;
                String dayslow = quote.getString("DaysLow");
                str[1]=dayslow;
                // tv1.setText(quote.getString("DaysLow"));
                str[2]= quote.getString("DaysHigh");
                str[3]= quote.getString("Open");
                str[4]= quote.getString("Change");
            }

            // A Simple JSONObject Value Pushing
            // json.put("execution-start-time", "sample value");
            Log.d(TAG, "<jsonobject>\n" + json.toString()
                    + "\n</jsonobject>");
            // Log.i("Praeda12",json.get("").toString());

            // Closing the input stream will trigger connection release
            instream.close();
        }

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.getMessage();
    }
    return str;
}

`我叫它:

RestClient.connect("http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote");

我得到以下异常:

`09-07 00:00:26.675: W/System.err(469): java.net.UnknownHostException: finance.yahoo.com
09-07 00:00:26.755: W/System.err(469):  at java.net.InetAddress.lookupHostByName(InetAddress.java:513)
09-07 00:00:26.755: W/System.err(469):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:278)
09-07 00:00:26.755: W/System.err(469):  at java.net.InetAddress.getAllByName(InetAddress.java:242)
09-07 00:00:26.755: W/System.err(469):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
09-07 00:00:26.755: W/System.err(469):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-07 00:00:26.755: W/System.err(469):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-07 00:00:26.765: W/System.err(469):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
09-07 00:00:26.765: W/System.err(469):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-07 00:00:26.765: W/System.err(469):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-07 00:00:26.765: W/System.err(469):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-07 00:00:26.765: W/System.err(469):  at RestClient.connect(RestClient.java:65)
09-07 00:00:26.765: W/System.err(469):  at ExchangeUpdateService.buildUpdate(ExchangeUpdateService.java:43)
09-07 00:00:26.765: W/System.err(469):  at ExchangeUpdateService.onStart(ExchangeUpdateService.java:31)
09-07 00:00:26.765: W/System.err(469):  at android.app.Service.onStartCommand(Service.java:420)
09-07 00:00:26.765: W/System.err(469):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3059)
09-07 00:00:26.765: W/System.err(469):  at android.app.ActivityThread.access$3600(ActivityThread.java:126)
09-07 00:00:26.765: W/System.err(469):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2101)
09-07 00:00:26.765: W/System.err(469):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 00:00:26.765: W/System.err(469):  at android.os.Looper.loop(Looper.java:123)
09-07 00:00:26.765: W/System.err(469):  at 
android.app.ActivityThread.main(ActivityThread.java:4633)
09-07 00:00:26.765: W/System.err(469):  at java.lang.reflect.Method.invokeNative(Native Method)
09-07 00:00:26.765: W/System.err(469):  at java.lang.reflect.Method.invoke(Method.java:521)
09-07 00:00:26.765: W/System.err(469):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
09-07 00:00:26.765: W/System.err(469):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-07 00:00:26.765: W/System.err(469):  at dalvik.system.NativeStart.main(Native Method)`

请帮忙。

4

2 回答 2

1

日志的第一行给了你一个非常明确的答案09-07 00:00:26.675: W/System.err(469): java.net.UnknownHostException: finance.yahoo.com...... 由于某种原因,finance.yahoo.com 无法解析。

最可能的问题是您的网络连接。没有理由(基于此日志)怀疑问题出在您的应用程序上。

于 2012-09-06T18:46:33.183 回答
0

事实证明有两个问题

  1. Internet permission清单文件中未提及。
  2. 传递的 URL 不正确。
    它应该是:

"http://query.yahooapis.com/v1/public/yql?q=select%20rate%2Cname%20from%20csv%20where%20url%3D'http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes%3Fs%3D" + from + to + "%253DX%26f%3Dl1n'%20and%20columns%3D'rate%2Cname'&format=json&callback=parseExchangeRate"

于 2012-09-08T10:57:53.473 回答