Получить данные из интернета Android - PullRequest
2 голосов
/ 27 февраля 2012

Я хотел бы создать приложение для Android, которое получает данные из Интернета.Так, например, я хотел бы создать очень простое приложение для акций, которое использует данные из финансов Yahoo.Я просто хочу сделать это для учебного процесса.Поэтому, может, кто-нибудь даст мне примеры кода с пояснениями или порекомендует мне несколько книг книг, которые указаны в этом поле, пожалуйста.Спасибо!

Ответы [ 2 ]

5 голосов
/ 27 февраля 2012

Попробуйте: это пример, когда мы берем время с NTP.

SntpClient client = new SntpClient();
String dateFromNtpServer = "";
if (client.requestTime("0.us.pool.ntp.org", 30000)) {
                time = client.getNtpTime();
                newTime = time;
                Log.d("shetty", newTime + "....newTime");

                Calendar calendar = Calendar.getInstance();
                try {

                    calendar.setTimeInMillis(time);



                    calendar.getTime();


                    GMTtoEST gmttoest = new GMTtoEST();
                    dateFromNtpServer = gmttoest
                            .ReturnMeEst(calendar.getTime());

                    dateFromNtpServer = dateFromNtpServer + "  EST";


                } catch (Exception e) {
                    // TODO: handle exception
                    dateFromNtpServer = "No Response from NTP";
                }

            }

2) GMTToEst.java

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class GMTtoEST {
    public static void main(String args[]) {

        Date date = new Date();
        DateFormat estFormat = new SimpleDateFormat();
        DateFormat gmtFormat = new SimpleDateFormat();
        TimeZone gmtTime = TimeZone.getTimeZone("GMT");
        TimeZone estTime = TimeZone.getTimeZone("EST");
        estFormat.setTimeZone(gmtTime);
        gmtFormat.setTimeZone(estTime);
        System.out.println("GMT Time: " + estFormat.format(date));
        System.out.println("EST Time: " + gmtFormat.format(date));

    }

    public String ReturnMeEst(Date GmtTime) {
        // Date date = new Date();

        DateFormat estFormat = new SimpleDateFormat();
        DateFormat gmtFormat = new SimpleDateFormat();

        TimeZone gmtTime = TimeZone.getTimeZone("GMT");
        TimeZone estTime = TimeZone.getTimeZone("EST");

        estFormat.setTimeZone(gmtTime);

        String timeInGmt = "";
        gmtFormat.setTimeZone(estTime);

        // System.out.println("GMT Time: " + estFormat.format(date));
        System.out.println("EST Time: " + gmtFormat.format(GmtTime));

        timeInGmt = gmtFormat.format(GmtTime);

        return timeInGmt;
    }

}

3) SntpClient.java

<code>import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.os.SystemClock;
import android.util.Config;
import android.util.Log;

/**
 * {@hide}
 *
 * Simple SNTP client class for retrieving network time.
 *
 * Sample usage:
 * <pre>SntpClient client = new SntpClient();
 * if (client.requestTime("time.foo.com")) {
 *     long now = client.getNtpTime() + SystemClock.elapsedRealtime() - client.getNtpTimeReference();
 * }
 * 
* / public class SntpClient {приватная статическая конечная строка String TAG = "SntpClient";private static final int REFERENCE_TIME_OFFSET = 16;private static final int ORIGINATE_TIME_OFFSET = 24;private static final int RECEIVE_TIME_OFFSET = 32;private static final int TRANSMIT_TIME_OFFSET = 40;private static final int NTP_PACKET_SIZE = 48;приватная статическая final int NTP_PORT = 123;private static final int NTP_MODE_CLIENT = 3;приватная статическая final int NTP_VERSION = 3;// Количество секунд между 1 января 1900 года и 1 января 1970 года // 70 лет плюс 17 високосных дней приватной статической конечной длины OFFSET_1900_TO_1970 = ((365L * 70L) + 17L) * 24L * 60L * 60L;// системное время, вычисленное по ответу сервера NTP private long mNtpTime;// значение SystemClock.elapsedRealtime (), соответствующее mNtpTime private long mNtpTimeReference;// время приема-передачи в миллисекундах private long mRoundTripTime;/ ** * Отправляет SNTP-запрос данному хосту и обрабатывает ответ.* * @param host host name сервера.* @param timeout сетевое время ожидания в миллисекундах.* @ return true, если транзакция прошла успешно.* / public boolean requestTime (String host, int timeout) {try {DatagramSocket socket = new DatagramSocket ();socket.setSoTimeout (тайм-аут)InetAddress address = InetAddress.getByName (host);byte [] buffer = новый байт [NTP_PACKET_SIZE];DatagramPacket request = new DatagramPacket (buffer, buffer.length, address, NTP_PORT);// set mode = 3 (client) и version = 3 // mode находится в младших 3 битах первого байта // версия находится в битах 3-5 буфера первого байта [0] = NTP_MODE_CLIENT |(NTP_VERSION << 3);// получить текущее время и записать его в пакет запроса long requestTime = System.currentTimeMillis ();long requestTicks = SystemClock.elapsedRealtime ();writeTimeStamp (буфер, TRANSMIT_TIME_OFFSET, requestTime);socket.send (запрос);// читаем ответ DatagramPacket response = new DatagramPacket (buffer, buffer.length);socket.receive (ответ);long responseTicks = SystemClock.elapsedRealtime ();long responseTime = requestTime + (responseTicks - requestTicks);socket.close ();// извлекать результаты long originateTime = readTimeStamp (buffer, ORIGINATE_TIME_OFFSET);long receiveTime = readTimeStamp (буфер, RECEIVE_TIME_OFFSET);long transTime = readTimeStamp (буфер, TRANSMIT_TIME_OFFSET);long roundTripTime = responseTicks - requestTicks - (TransferTime - receiveTime);// receiveTime = originateTime + Transit + Skew // responseTime = TransmitTime + Transit - Skew // ClockOffset = ((receiveTime - originateTime) + (TransferTime - responseTime)) / 2 // = ((originateTime + транзит + skew - originateTime)+ // (TransmitTime - (TransmitTime + Transit - Skew))) / 2 // = ((Transit + Skew) + (TransmitTime - TransmitTime - Transit + Skew)) / 2 // = (Transit + Skew - Transit + Skew) / 2 // = (2 * skew) / 2 = skew long clockOffset = ((receiveTime - originateTime) + (transTime - responseTime)) / 2;// if (Config.LOGD) Log.d (TAG, "round trip:" + roundTripTime + "ms");// if (Config.LOGD) Log.d (TAG, "смещение часов:" + clockOffset + "ms");// сохранить наши результаты - использовать время на этой стороне задержки сети // (ответ, а не время запроса) mNtpTime = responseTime + clockOffset;mNtpTimeReference = responseTicks;mRoundTripTime = roundTripTime;} catch (Exception e) {if (Config.LOGD) Log.d (TAG, "время запроса не выполнено:" + e);вернуть ложь;} вернуть истину;} / ** * Возвращает время, вычисленное по транзакции NTP.* * Значение времени возврата @ вычисляется из ответа сервера NTP.* / public long getNtpTime () {return mNtpTime;} / ** * Возвращает эталонное значение часов (значение SystemClock.elapsedRealtime ()) *, соответствующее времени NTP.* * @ возвращают опорные часы, соответствующие времени NTP.* / public long getNtpTimeReference () {return mNtpTimeReference;} / ** * Возвращает время приема-передачи транзакции NTP * * @ return время возврата в миллисекундах.* / public long getRoundTripTime () {return mRoundTripTime;} / ** * Считывает беззнаковое 32-разрядное старшее порядковое число из заданного смещения в буфере.* / private long read32 (буфер byte [], смещение int) {byte b0 = buffer [offset];байт b1 = буфер [смещение + 1];байт b2 = буфер [смещение + 2];байт b3 = буфер [смещение + 3];// преобразовать подписанные байты в значения без знака int i0 = ((b0 & 0x80) == 0x80? (b0 & 0x7F) + 0x80: b0);int i1 = ((b1 & 0x80) == 0x80? (b1 & 0x7F) + 0x80: b1);int i2 = ((b2 & 0x80) == 0x80? (b2 & 0x7F) + 0x80: b2);int i3 = ((b3 & 0x80) == 0x80? (b3 & 0x7F) + 0x80: b3);return ((long) i0 << 24) + ((long) i1 << 16) + ((long) i2 << 8) + (long) i3;} / ** * Считывает метку времени NTP с заданным смещением в буфере и возвращает * ее как системное время (миллисекунды с 1 января 1970 года) * / public long readTimeStamp (byte [] buffer, int offset) {long seconds= read32 (буфер, смещение);длинная дробь = read32 (буфер, смещение + 4);возврат ((секунды - OFFSET_1900_TO_1970) * 1000) + ((дробь * 1000L) / 0x100000000L);} / ** * Записывает системное время (в миллисекундах с 1 января 1970 года) как отметку времени NTP * с заданным смещением в буфере.* / private void writeTimeStamp (буфер byte [], int offset, long time) {длинные секунды = время / 1000L;длинные миллисекунды = время - секунды * 1000 л;секунд + = OFFSET_1900_TO_1970;// записывать секунды в формате с прямым порядком байтов [offset ++] = (byte) (секунды >> 24);buffer [offset ++] = (byte) (секунд >> 16);buffer [offset ++] = (byte) (секунд >> 8);buffer [offset ++] = (byte) (секунд >> 0);длинная дробь = миллисекунды * 0x100000000L / 1000L;// записать дробь в формате с прямым порядком байтов [offset ++] = (byte) (дробь >> 24);buffer [offset ++] = (byte) (дробь >> 16);buffer [offset ++] = (byte) (дробь >> 8);// младшие биты должны быть случайным буфером данных [offset ++] = (byte) (Math.random () * 255.0);}}
0 голосов
/ 27 февраля 2012

Я мог бы представить, что у Yahoo есть какой-то API для этого. Вы можете найти несколько примеров того, как создать приложение для Twitter (у них очень дружественный API), для хорошего начала, как обрабатывать простое взаимодействие API ответа / запроса. Некоторые примеры:

http://www.vogella.de/blog/2010/02/15/twitter-android/

http://codehenge.net/blog/2011/05/android-programming-tutorial-a-simple-twitter-feed-reader/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...