实时获取股票数据的android app应用程序源码分享

From:http://www.jb51.net/article/72449.htm

本文我们分享一个实时获取股票数据的android app应用程序源码分享,可以作为学习使用,本文贴出部分重要代码,需要的朋友可以参考下本文

最近学习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,用来显示添加的股票列表。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<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提供的接口来实时获取股票数据,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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,每隔两秒发送请求获取数据,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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时,可以显示上次的股票列表。代码如下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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。

?
1
2
3
4
5
6
7
8
   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>

代码响应事件并删除:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@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.当有大额委托挂单时,发送消息提醒,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{
...
       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应用程序源码,希望大家喜欢。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值