Android: как отправить текущее время/дату непосредственно на веб-сервер, когда пользователь нажимает на элемент

Я создал список с diff. активность к каждому пункту. Когда пользователь нажимает «часы», я хотел бы получить текущее время/дату и отправить эти данные на веб-сервер как можно быстрее (без прохождения двухэтапного процесса для подтверждения). Это будет для класса secondActivity.

ОБНОВЛЕНИЕ * Я планирую добавить пароль ко времени/дате в телефоне, чтобы пользователь не мог их изменить. Я предпочитаю текущее время/дату в телефоне, а не время на сервере, потому что, если нет сигнала/приема, нет способа установить часы. Как я могу получить текущее время/дату в телефоне?

Клиент.java

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class Customer extends ListActivity
{
    TextView selection;
    String[] items = { "Start Trip", "Clock in", "Customer Svc", 
            "Independent Inspection", "Pick Up", "Log Out" };

    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        setListAdapter(new ArrayAdapter<String>(
                this, android.R.layout.simple_list_item_1, items));
        selection = (TextView) findViewById(R.id.selection);
    }

private static final int ACTIVITY_0 = 0;
private static final int ACTIVITY_1 = 1;
private static final int ACTIVITY_2 = 2;

@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
    super.onListItemClick(l, v, position, id);
    final Intent intent = new Intent();
    // Set up different intents based on the item clicked: 
    switch (position)
    {
        case ACTIVITY_0:
            intent.setClass(this, com.company.merrill.IntentIntegrator.class);
            break;
        case ACTIVITY_1:
            intent.setClass(this, com.company.merrill.SecondActivity.class);
            break;
        case ACTIVITY_2:
            intent.setClass(this, com.company.merrill.ThirdActivity.class);
            break;
        default:
            break;
    }
    // Pass the item position as the requestCode parameter, so on the `Activity`'s
    // return you can examine it, and determine which activity were you in prior. 
    startActivityForResult(intent, position);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    super.onActivityResult(requestCode, resultCode, intent);
    if (resultCode == RESULT_OK)
    {
        // Perform different actions based on from which activity is
        // the application returning:
        switch (requestCode)
        {
            case ACTIVITY_0:
                // contents contains whatever the code was
                String contents = intent.getStringExtra("SCAN_RESULT");

                // Format contains the type of code i.e. UPC, EAN, QRCode etc...
                String format = intent.getStringExtra("SCAN_RESULT_FORMAT");

                // Handle successful scan. In this example 
                // I just put the results into the TextView
                resultsTxt.setText(format + "\n" + contents);
                break;
            case ACTIVITY_1:
                // TODO: handle the return of the SecondActivity
                break;
            case ACTIVITY_2:
                // TODO: handle the return of the ThirdActivity
                break;
            default:
                break;
        }
    }
    else if (resultCode == RESULT_CANCELED)
    {
        // Handle cancel. If the user presses 'back' 
        // before a code is scanned.
        resultsTxt.setText("Canceled");
    }
}

person merrill    schedule 16.05.2011    source источник


Ответы (4)


самым быстрым способом было бы создать новый поток и открыть соединение с сервером.

Взгляните на код:

new Thread(new Runnable() {

    public void run() {

        URL url = new URL("http://www.example.com/?data="+System.currentTimeMillis());

        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        //if there is no need to read the content then we close the connection

        urlConnection.disconnect();
    }
}).start();

Затем на стороне сервера вы должны прочитать переменную $_GET['data'], если вы работаете с php.

Учтите, что это решение не подходит для разных часовых поясов. Я бы, вероятно, полагался на дату на стороне сервера.

person Andrea Baccega    schedule 16.05.2011
comment
Я думаю, что было бы неплохо использовать время сервера вместо времени телефона, которым пользователь может воспользоваться и изменить время самостоятельно. Можете ли вы дать мне более подробную информацию о том, как объединить это в файле customer.java, который будет ссылаться только на элемент «часы»? - person merrill; 16.05.2011
comment
Я понял, что если пользователь находится в зоне без сигнала, он не сможет связаться с сервером. Я думаю, что было бы лучше рискнуть, чтобы захватить время / дату в телефоне. - person merrill; 16.05.2011
comment
Я планирую добавить пароль ко времени/дате в телефоне, чтобы пользователь не мог их изменить. Я предпочитаю текущее время/дату в телефоне, а не время на сервере, потому что, если нет сигнала/приема, нет способа установить часы. Как я могу получить текущее время/дату в телефоне? - person merrill; 16.05.2011
comment
Можете ли вы дать мне пример кода, чтобы получить текущее время и дату с самого устройства (я смог заблокировать настройки времени / даты) и отправить их на сервер (или сохранить в телефоне и попытаться отправить, когда прием доступен) .? Спасибо - person merrill; 21.05.2011

Как насчет использования времени:

    Time timeToday = new Time();
    timeToday.setToNow();
    today = timeToday.year+"-"+ timeToday.MONTH+"-"+timeToday.monthDay;
person Paulina D.    schedule 16.05.2011
comment
Мне нужен пример кода, в котором я могу щелкнуть элемент «часы», и он захватит текущее время/дату и отправит его на веб-сервер. Вы предлагаете создать другой класс, который будет secondActivity или кодом внутри Customer.java только для «часов» onclickitem - person merrill; 16.05.2011
comment
Можете ли вы дать мне пример кода, чтобы получить текущее время и дату с самого устройства (я смог заблокировать настройки времени / даты) и отправить их на сервер (или сохранить в телефоне и попытаться отправить, когда прием доступен) .? Спасибо - person merrill; 21.05.2011

Зачем полагаться на время с пользовательского устройства? Что, если я изменю время на своем телефоне, а затем зарегистрируюсь? Как вы собираетесь обрабатывать разные часовые пояса?

Почему бы просто не полагаться на серверное время веб-сервера, поскольку вы знаете, что можете зависеть от этого, и вы уже делаете вызов веб-серверу?

person Raoul    schedule 16.05.2011
comment
Я не понимал, что пользователь может изменить время и воспользоваться этим. Теперь я буду использовать серверное время веб-сервера. - person merrill; 16.05.2011
comment
Я понял, что если пользователь находится в зоне без сигнала, он не сможет связаться с сервером. Я думаю, что было бы лучше рискнуть, чтобы захватить время / дату в телефоне. - person merrill; 16.05.2011
comment
Я планирую добавить пароль ко времени/дате в телефоне, чтобы пользователь не мог их изменить. Я предпочитаю текущее время/дату в телефоне, а не время на сервере, потому что, если нет сигнала/приема, нет способа установить часы. Как я могу получить текущее время/дату в телефоне? - person merrill; 16.05.2011
comment
Вы не можете добавить пароль, чтобы запретить пользователю изменять данные/время своего устройства, учитывая, что это его устройство и все такое... - person Raoul; 17.05.2011
comment
Можете ли вы дать мне пример кода, чтобы получить текущее время и дату с самого устройства (я смог заблокировать настройки времени / даты) и отправить их на сервер (или сохранить в телефоне и попытаться отправить, когда прием доступен) .? Спасибо - person merrill; 21.05.2011

используйте это, чтобы получить текущую дату и время:

    private String getDateandTime() {
       Calendar c = Calendar.getInstance();
       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String formattedDate = df.format(c.getTime());
       Log.e("Activity name", "time date "+formattedDate);
       return formattedDate;
   }

И вызовите эту функцию, когда пользователь нажмет кнопку, и отправьте ее на сервер с помощью сетевой библиотеки, такой как Volley или Retrofit.

person ankitkhandelwal185    schedule 23.04.2017