亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

實時獲取股票數據的android app應用程序源碼分享

2020-04-11 11:25:49
字體:
來源:轉載
供稿:網友

最近學習Android應用開發,不知道寫一個什么樣的程序來練練手,正好最近股票很火,就一個App來實時獲取股票數據,取名為Mystock。使用開發工具Android Studio,需要從Android官網下載,下載地址:http://developer.android.com/sdk/index.html。不幸的是Android是Google公司的,任何和Google公司相關的在國內都無法直接訪問,只能通過VPN訪問。

下圖為Android Studio打開一個工程的截圖:

 

下面按步介紹Mystock的實現步驟。

1.以下是activa_main.xml的內容。上面一排是三個TextView,分別用來顯示上證指數,深圳成指,創業板指。中間一排是一個EditText和一個Button,用來添加股票。下面是一個Table,用來顯示添加的股票列表。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"  android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity">  <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">    <LinearLayout      android:layout_width="0dp"      android:layout_weight="0.33"      android:layout_height="wrap_content"      android:orientation="vertical"      android:gravity="center" >      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/stock_sh_name"/>      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/stock_sh_index"/>      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="12sp"        android:id="@+id/stock_sh_change"/>    </LinearLayout>    <LinearLayout      android:layout_width="0dp"      android:layout_weight="0.33"      android:layout_height="wrap_content"      android:orientation="vertical"      android:gravity="center" >      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/stock_sz_name"/>      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/stock_sz_index"/>      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="12sp"        android:id="@+id/stock_sz_change"/>    </LinearLayout>    <LinearLayout      android:layout_width="0dp"      android:layout_weight="0.33"      android:layout_height="wrap_content"      android:orientation="vertical"      android:gravity="center" >      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/stock_chuang_name"/>      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/stock_chuang_index"/>      <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="12sp"        android:id="@+id/stock_chuang_change"/>    </LinearLayout>  </LinearLayout>  <LinearLayout    android:orientation="horizontal"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <EditText      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:inputType="number"      android:maxLength="6"      android:id="@+id/editText_stockId"      android:layout_weight="1" />    <Button      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="@string/button_add_label"      android:onClick="addStock" />  </LinearLayout>  <!--ListView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/listView" /-->  <ScrollView    android:layout_width="match_parent"    android:layout_height="wrap_content">    <TableLayout      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:id="@+id/stock_table"></TableLayout>  </ScrollView></LinearLayout>

應用截圖如下:

 

 2.數據獲取,這里使用sina提供的接口來實時獲取股票數據,代碼如下:

public void querySinaStocks(String list){    // Instantiate the RequestQueue.    RequestQueue queue = Volley.newRequestQueue(this);    String url ="http://hq.sinajs.cn/list=" + list;    //http://hq.sinajs.cn/list=sh600000,sh600536    // 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) {            updateStockListView(sinaResponseToStocks(response));          }        },        new Response.ErrorListener() {          @Override          public void onErrorResponse(VolleyError error) {          }        });    queue.add(stringRequest);  }

這里發送Http請求用到了Volley,需要在build.gradle里面添加dependencies:compile 'com.mcxiaoke.volley:library:1.0.19'。

3.定時刷新股票數據,使用了Timer,每隔兩秒發送請求獲取數據,代碼如下:

  Timer timer = new Timer("RefreshStocks");    timer.schedule(new TimerTask() {      @Override      public void run() {        refreshStocks();      }    }, 0, 2000);  private void refreshStocks(){    String ids = "";    for (String id : StockIds_){      ids += id;      ids += ",";    }    querySinaStocks(ids);  }

 4.在程序退出時存儲股票代碼,下次打開App時,可以顯示上次的股票列表。代碼如下。

 private void saveStocksToPreferences(){    String ids = "";    for (String id : StockIds_){      ids += id;      ids += ",";    }    SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);    SharedPreferences.Editor editor = sharedPref.edit();    editor.putString(StockIdsKey_, ids);    editor.commit();  }  @Override  public void onDestroy() {    super.onDestroy(); // Always call the superclass    saveStocksToPreferences();  }

5.刪除選中的股票,在menu_main.xml里面添加一個action。

<menu xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">  <item android:id="@+id/action_settings" android:title="@string/action_settings"    android:orderInCategory="100" app:showAsAction="never" />  <item android:id="@+id/action_delete" android:title="@string/action_delete"    android:orderInCategory="100" app:showAsAction="never" /></menu>

代碼響應事件并刪除:

 @Override  public boolean onOptionsItemSelected(MenuItem item) {    // Handle action bar item clicks here. The action bar will    // automatically handle clicks on the Home/Up button, so long    // as you specify a parent activity in AndroidManifest.xml.    int id = item.getItemId();    //noinspection SimplifiableIfStatement    if (id == R.id.action_settings) {      return true;    }    else if(id == R.id.action_delete){      if(SelectedStockItems_.isEmpty())        return true;      for (String selectedId : SelectedStockItems_){        StockIds_.remove(selectedId);        TableLayout table = (TableLayout)findViewById(R.id.stock_table);        int count = table.getChildCount();        for (int i = 1; i < count; i++){          TableRow row = (TableRow)table.getChildAt(i);          LinearLayout nameId = (LinearLayout)row.getChildAt(0);          TextView idText = (TextView)nameId.getChildAt(1);          if(idText != null && idText.getText().toString() == selectedId){            table.removeView(row);            break;          }        }      }      SelectedStockItems_.clear();    }    return super.onOptionsItemSelected(item);  }

屏幕截圖:

 

6.當有大額委托掛單時,發送消息提醒,代碼如下:

{...      String text = "";      String sBuy = getResources().getString(R.string.stock_buy);      String sSell = getResources().getString(R.string.stock_sell);      if(Double.parseDouble(stock.b1_ )>= StockLargeTrade_) {        text += sBuy + "1:" + stock.b1_ + ",";      }      if(Double.parseDouble(stock.b2_ )>= StockLargeTrade_) {        text += sBuy + "2:" + stock.b2_ + ",";      }      if(Double.parseDouble(stock.b3_ )>= StockLargeTrade_) {        text += sBuy + "3:" + stock.b3_ + ",";      }      if(Double.parseDouble(stock.b4_ )>= StockLargeTrade_) {        text += sBuy + "4:" + stock.b4_ + ",";      }      if(Double.parseDouble(stock.b5_ )>= StockLargeTrade_) {        text += sBuy + "5:" + stock.b5_ + ",";      }      if(Double.parseDouble(stock.s1_ )>= StockLargeTrade_) {        text += sSell + "1:" + stock.s1_ + ",";      }      if(Double.parseDouble(stock.s2_ )>= StockLargeTrade_) {        text += sSell + "2:" + stock.s2_ + ",";      }      if(Double.parseDouble(stock.s3_ )>= StockLargeTrade_) {        text += sSell + "3:" + stock.s3_ + ",";      }      if(Double.parseDouble(stock.s4_ )>= StockLargeTrade_) {        text += sSell + "4:" + stock.s4_ + ",";      }      if(Double.parseDouble(stock.s5_ )>= StockLargeTrade_) {        text += sSell + "5:" + stock.s5_ + ",";      }      if(text.length() > 0)        sendNotifation(Integer.parseInt(sid), stock.name_, text);...}  public void sendNotifation(int id, String title, String text){    NotificationCompat.Builder nBuilder =        new NotificationCompat.Builder(this);    nBuilder.setSmallIcon(R.drawable.ic_launcher);    nBuilder.setContentTitle(title);    nBuilder.setContentText(text);    nBuilder.setVibrate(new long[]{100, 100, 100});    nBuilder.setLights(Color.RED, 1000, 1000);    NotificationManager notifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);    notifyMgr.notify(id, nBuilder.build());  }

屏幕截圖:


以上通過圖文并茂的方式給大家分享了一個實時獲取股票數據的android app應用程序源碼,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久国产精品99gif| 日韩欧美在线观看视频| 成人网址在线观看| 搡老女人一区二区三区视频tv| 国产精品男女猛烈高潮激情| 欧美国产视频一区二区| 亚洲男女性事视频| 成人性生交大片免费看视频直播| 久久久91精品国产| 热99精品里视频精品| 亚洲色图18p| 久久999免费视频| 久久69精品久久久久久国产越南| 欧美高清理论片| 91高清视频在线免费观看| 在线观看久久久久久| 欧美—级高清免费播放| 欧美成人国产va精品日本一级| 国产在线拍揄自揄视频不卡99| 国产日本欧美一区二区三区| 国产一区二区三区高清在线观看| 国产精品美乳在线观看| 92国产精品视频| 一个人www欧美| 日韩av在线播放资源| 国产精品91一区| 日韩欧美国产一区二区| 国产精品∨欧美精品v日韩精品| 成人精品久久av网站| 尤物99国产成人精品视频| 亚洲国产古装精品网站| 亚洲国产成人精品女人久久久| 国产精品一区久久久| 亚洲午夜av久久乱码| 91福利视频在线观看| 亚洲欧美制服综合另类| 日韩经典一区二区三区| 美女精品久久久| 中文字幕欧美精品在线| 91精品国产91久久久久久| 国产精品av在线播放| 欧美成人精品xxx| 尤物九九久久国产精品的分类| 久久精品91久久久久久再现| 亚洲精品第一国产综合精品| 欧美xxxx做受欧美.88| 亚洲成人激情视频| 日韩av快播网址| 欧美亚洲在线观看| 亚洲视频999| 久久精品99国产精品酒店日本| 亚洲qvod图片区电影| 日韩中文字幕免费看| 亚洲精品一区中文字幕乱码| 亚洲精品不卡在线| 久久久精品视频在线观看| 国产精品自产拍在线观看| 色婷婷综合久久久久中文字幕1| 亚洲激情视频网站| 亚洲欧美精品中文字幕在线| 欧美怡红院视频一区二区三区| 91福利视频网| 亚洲人线精品午夜| 国产精品丝袜白浆摸在线| 久久视频国产精品免费视频在线| 国产成人avxxxxx在线看| 日韩欧美在线观看视频| 亚洲一区亚洲二区亚洲三区| 日韩欧美亚洲成人| 亚洲天堂免费视频| 亚洲美女免费精品视频在线观看| 亚洲最大福利视频| 国产精品96久久久久久又黄又硬| 久久九九免费视频| 日本欧美一二三区| 日韩一区二区久久久| 亚洲三级黄色在线观看| 成人中心免费视频| 91性高湖久久久久久久久_久久99| 日韩暖暖在线视频| 欧美一区二区大胆人体摄影专业网站| 欧美亚洲国产另类| 亚洲精品一二区| 中国日韩欧美久久久久久久久| 精品无人区乱码1区2区3区在线| 欧美视频在线免费看| 综合欧美国产视频二区| 亚洲精品国产精品国产自| 精品成人69xx.xyz| 欧美一区二粉嫩精品国产一线天| 91免费在线视频网站| 国内精品久久久久久影视8| 国产精品久久久久久久久久久不卡| 精品久久久久久久久久国产| 精品亚洲夜色av98在线观看| 国产精品精品久久久久久| 最近2019中文字幕在线高清| 国产999精品久久久影片官网| 亚洲欧洲视频在线| 国产精品久久久久久av福利| 欧美激情奇米色| 久久91精品国产| 日韩亚洲欧美成人| 国产成人精品久久二区二区| 国产精品国产三级国产aⅴ浪潮| 久久久久国产精品www| 色诱女教师一区二区三区| 久久九九有精品国产23| 久久久999成人| 国产日韩av在线播放| 日韩一区视频在线| 在线播放日韩欧美| 亚洲香蕉伊综合在人在线视看| 国产精品一久久香蕉国产线看观看| 中文字幕亚洲欧美| 青青草一区二区| 欧美巨大黑人极品精男| 91精品国产高清| 91色在线视频| 日韩欧美高清在线视频| 欧美丰满少妇xxxxx| 精品视频在线导航| 国产精品啪视频| 欧美激情视频一区二区| 欧美黄网免费在线观看| 精品国产成人av| 亚洲精品电影网在线观看| 国产98色在线| 国产精品第8页| 欧美有码在线视频| 国产精品日韩久久久久| 精品偷拍各种wc美女嘘嘘| 久久伊人精品天天| www.精品av.com| 欧美男插女视频| 国产精品青草久久久久福利99| 欧美一级免费视频| 欧美片一区二区三区| 欧美激情精品久久久| 欧美美女操人视频| 欧美在线一级视频| 久久激情视频免费观看| 91视频-88av| 国产日韩欧美夫妻视频在线观看| 日韩在线视频免费观看高清中文| 国产日韩欧美综合| 国产精品久久久久久久久久久新郎| 日韩精品在线视频| 国产日韩精品一区二区| 色yeye香蕉凹凸一区二区av| 亚洲999一在线观看www| 国产va免费精品高清在线| 欧美精品激情blacked18| 国产精品96久久久久久又黄又硬| 国内精久久久久久久久久人| 欧美日韩一区二区在线播放| 国产精品爽爽ⅴa在线观看| 91高清在线免费观看| 欧美视频在线免费看| 日本精品性网站在线观看| 国产91热爆ts人妖在线| 久久国产精品免费视频| 国产视频欧美视频| 国产一区视频在线播放|