guifeng 发表于 2022-1-9 00:10:49

一个实时获取股票数据的app应用程序源码分享(图)

实时获取股票数据的app源码分享

更新时间:2015 年 9 月 20 日 09:23:47 作者:

在这篇文章中,我们分享了一个实时获取股票数据的应用程序的源代码,可以用于学习。本文发布了一些重要的代码。有需要的朋友可以参考以下文章。

最近学的是应用开发,不知道写什么程序来练手。正好最近股票很火天外神坛,所以我就用一个app实时获取股票数据并命名。使用开发工具需要从官网下载,下载地址:. 不幸的是,它是公司的,任何与公司相关的东西都不能在中国直接访问,只能通过VPN。

下图是打开项目的截图:

下面描述的实施步骤是逐步的。

1.以下是.xml的内容。上排三个如何获取手机app源代码如何获取手机app源代码,分别用于显示上证综指、深成指、创业板指数。中间一行是一加一加库存。下面是一个显示添加股票列表的表格。

<p><pre class="brush:csharp;">   
<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>

<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>
</pre></p>
该应用程序的屏幕截图如下:

http://tt.ccoox.cn/data/attachment/forum/20220109/1641658249673_1.png

2.数据获取,这里使用新浪提供的接口实时获取股票数据,代码如下:

<p><pre class="brush:csharp;">   
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);
}
</pre></p>
它用于在这里发送 Http 请求。它需要在 build.: 'com..::1.0.19' 中添加。

3.定时刷新股票数据,使用Timer,每两秒发送请求获取数据,代码如下:

<p><pre class="brush:csharp;">   
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);
}</pre></p>
4.程序退出时存储股票代码,下次打开应用时,可以显示最后的股票列表。代码显示如下。

<p><pre class="brush:csharp;">   
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();
}</pre></p>
5.删除选中的股票并在 .xml 中添加一个。

<p><pre class="brush:csharp;">   
<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></pre></p>
代码响应事件并删除:

<p><pre class="brush:csharp;">   
@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);
}
</pre></p>
截图:

http://tt.ccoox.cn/data/attachment/forum/20220109/1641658249673_2.png

6.当有大量挂单时,发送消息提醒,代码如下:

<p><pre class="brush:csharp;">   
{
...
      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());
}</pre></p>
截图:

http://tt.ccoox.cn/data/attachment/forum/20220109/1641658249673_3.png

以上分享了一款通过图文实时获取股票数据的app源码。我希望你喜欢它。
页: [1]
查看完整版本: 一个实时获取股票数据的app应用程序源码分享(图)