Как подключить сокеты и получить данные?

killpwnrang3 спросил: 28 марта 2018 в 02:59 в: java

Я новичок в сокетах, я надеялся, что кто-то знает, как подключать сокеты в Android Studio и получать данные.

Это веб-приложение, которое использует socket.io, с которого я пытаюсь получить данные: https://ws-api.iextrading.com/1.0/stock/aapl/quote

Это ссылка на 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;
        }
    }
}

1 ответ

Morgan ответил: 28 марта 2018 в 03:24

Вы пытаетесь подключиться к веб-службе. Веб-сервисы могут возвращать либо XML, либо JSON. Фактическая библиотека Socket не нужна и не используется для этого. Этот конкретный веб-сервис возвращает JSON, поэтому вам нужна библиотека, которая может выполнить запрос GET к этому URL и проанализировать ответ. Для Android я рекомендую использовать Volley. Вы можете включить Volley в свой проект, добавив эту строку в свой build.gradle.

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

Этот вопрос может помочь вам начать.

killpwnrang3 ответил: 28 марта 2018 в 03:18
Это возвращает JSON, вы правы, но мне нужно будет обновлять приложение каждый раз при изменении данных?
m0skit0 ответил: 28 марта 2018 в 03:18
"Розетки не нужны и не используются для этого". Так неправильно. Наличие библиотек, которые абстрагируют сокеты для вас, не означает, что сокеты не используются.
Morgan ответил: 28 марта 2018 в 03:22
@ m0skit0 Я имел в виду, что использовал настоящую библиотеку Socket.
Morgan ответил: 28 марта 2018 в 03:23
@ killpwnrang3 Вероятно, я бы поставил задачу обновлять данные каждые X секунд или минут, повторяя запрос.
m0skit0 ответил: 28 марта 2018 в 03:23
Вы написали "сокет", а не "Библиотека сокетов".