【问题标题】:How to connect sockets and receive Data?如何连接套接字并接收数据?
【发布时间】:2018-10-02 03:13:44
【问题描述】:

我是套接字新手,我希望有人知道如何在 Android Studio 上连接套接字并接收数据。

这是使用 socket.io 的 websocket,我正在尝试从以下位置接收数据:https://ws-api.iextrading.com/1.0/stock/aapl/quote

这是解释 websocket 的 API 链接:https://iextrading.com/developer/docs/#websockets

我正在尝试为我的应用获取实时库存数据,但我不知道如何连接到套接字然后接收数据并且我的应用在打开之前就崩溃了,这是我目前的代码:

package com.example.android.stocksApp;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

    private static Socket s;
    private static InputStreamReader isr;
    private static BufferedReader br;

    TextView result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        result = (TextView)findViewById(R.id.result);

        stockData();

    }

    public void stockData (){
        myTask mTask = new myTask();
        mTask.execute();
    }

    class myTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            try {
                s = new Socket("https://ws-api.iextrading.com/1.0/stock/aapl/quote", 80);
                InputStream is = s.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String quote = br.readLine();
                result.setText(quote);
                s.close();
                is.close();
                isr.close();
                br.close();

            } catch (IOException e){
                e.printStackTrace();
            }

            return null;
        }
    }
}

【问题讨论】:

    标签: java android sockets


    【解决方案1】:

    您正在尝试连接到 Web 服务。 Web 服务可以返回 XML 或 JSON。实际的Socket 库不需要也不需要用于此。这个特定的 Web 服务返回一个 JSON,因此您需要一个能够向该 URL 发出 GET 请求并解析响应的库。对于 Android,我建议使用 Volley。您可以通过将此行添加到您的 build.gradle 来将 Volley 包含在您的项目中。

    implementation 'com.android.volley:volley:1.0.0'
    

    This 问题可能会帮助您入门。

    【讨论】:

    • 这确实返回 JSON ,你是对的,但我不需要在每次数据更改时不断刷新应用程序吗?
    • “套接字既不需要也不用于此”。大错特错。拥有为您抽象套接字的库并不意味着没有套接字在使用。
    • @m0skit0 我的意思是使用实际的 Socket 库。
    • @killpwnrang3 我可能会设置一个任务,通过再次发出请求来每 X 秒或每分钟刷新一次数据。
    • 你写的是“socket”而不是“Socket library”。
    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多