2012-09-06 67 views
0

我正在尝试新建一个应用程序,我希望获得股票更新,货币兑换更新等。我已经尝试了Google Finance API。不使用的原因:弃用并很快关闭,这会使我的应用程序过时。Yahoo Finance和Android

然后我转移到雅虎财经,发现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"); 

我例外gettnig如下:

`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)` 

请帮助。

回答

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"

1

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

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

+0

网络连接是否正常。我在我的设备上运行它,并且网络连接正在工作。 – harshit

相关问题