如何从网站服务器发送数据到Android应用程序

时间:2013-06-25 08:49:04

标签: android asp.net message polling

我在项目中要求使用.NET网站为Android应用程序配置主题。 我有的选项是实现从Android应用程序到服务器的轮询服务,该服务器经常轮询以查看是否需要进行任何更改。 可以任何人指出任何更好的方式或方法将数据从网站发送到Android应用程序,而不是经常轮询网站服务器的应用程序

3 个答案:

答案 0 :(得分:3)

更好但更复杂的方法是使用Google Cloud Messaging(又称推送通知)。

通过这种方式,您的服务器可以通知应用程序有新数据需要检索,然后您的应用才能查询您的服务器。

这是一种更加电池友好的方法,效果非常好。我以前用过这个也是出于同样的原因。

为了回答一些评论,轮询是一个坏主意,因为

  • 它无缘无故地过度使用您的服务器和用户的设备
  • 会耗尽用户的电池
  • 服务器想要与应用程序通信的时间与应用程序进行下一次轮询的时间之间总会存在一些延迟。

推送通知方法需要付出更多努力,但也有很大的优势。

答案 1 :(得分:1)

我会试试这个:

  1. 服务器正在侦听特定的IP /端口并等待TCP连接(使用套接字)
  2. Android使用TCP数据包连接服务器,服务器现在知道Android IP
  3. Android保持接收周期(使用带有超时的TCP套接字)
  4. 服务器将数据发送到Android IP
  5. Android从服务器接收数据
  6. 但很明显,第一个Android需要让服务器知道它的存在。您还需要编写自己的服务器代码

    我正在通过服务器为中继服务做这样的事情,该服务器充当我的Android应用和能量测量电子设备之间的桥梁。

答案 2 :(得分:0)

您好,互联网上有很多这方面的教程。但无论如何我发布代码来演示如何从android调用Web服务...这段代码只调用SOAP Web服务。要调用其他Web服务,如JSON,REST等,请在网上自行搜索。

public class HelloWebService extends Activity{

String SOAP_ACTION="http://tempuri.org/HelloWorld";
String METHOD_NAME = "HelloWorld";
String NAMESPACE = "http://tempuri.org/";
String URL = "http://192.168.1.15:80/himanshu/helloworldwebservice.asmx";
String SUM_SOAP_ACTION="http://tempuri.org/AddNumbers";
String METHOD_NAME1 = "AddNumbers";

TextView tv1,tv2,tv3,tv4,tv5;
EditText etA,etB,etName;
Button bt,dis;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.hello);

    etName = (EditText)findViewById(R.id.et);
    tv1 = (TextView)findViewById(R.id.tv1);
    tv2 = (TextView)findViewById(R.id.tv2);
    tv3 = (TextView)findViewById(R.id.tv3);
    tv4 = (TextView)findViewById(R.id.tv4);
    tv5 = (TextView)findViewById(R.id.tv5);
    etA = (EditText)findViewById(R.id.editA);
    etB = (EditText)findViewById(R.id.editB);
    bt =  (Button)findViewById(R.id.add);
    dis = (Button)findViewById(R.id.display);

    bt.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            sum();
        }
    });

    dis.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Hello();    
        }
    });

}

public void Hello(){

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    Log.d("request", request.toString());

    String str = etName.getText().toString();
    Log.d("str", str);

    request.addProperty("name", str);
    Log.d("request", request.toString());

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    Log.d("envelope", envelope.toString());
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    Log.d("envelope", envelope.toString());
    HttpTransportSE aht = new HttpTransportSE(URL);
    aht.debug=true;
    Log.d("aht", aht.toString());

    try
    {
        aht.call(SOAP_ACTION, envelope);
        SoapPrimitive results = (SoapPrimitive)envelope.getResponse();
        Log.d("result", results.toString());
        tv1.setText(""+results.toString());
    }
    catch (Exception e)
    {
        tv2.setText(e.getClass().toString());
        Log.d("Error",e.getClass().toString());
    }

}

public void sum(){

        SoapObject sum_request = new SoapObject(NAMESPACE, METHOD_NAME1);
        Log.d("sum_request", sum_request.toString());

        //PropertyInfo pro1 = new PropertyInfo();
        String strA = etA.getText().toString();
        String strB = etB.getText().toString();
        sum_request.addProperty("a", strA);
        sum_request.addProperty("b", strB);

        Log.d("sum_request", sum_request.toString());

        SoapSerializationEnvelope sum_envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        Log.d("sum_envelope", sum_envelope.toString());

        sum_envelope.dotNet = true;
        sum_envelope.setOutputSoapObject(sum_request);
        Log.d("sum_envelope", sum_envelope.toString());

        HttpTransportSE sum_aht = new HttpTransportSE(URL);
        sum_aht.debug=true;
        Log.d("sum_aht", sum_aht.toString());

        try
        {
            sum_aht.call(SUM_SOAP_ACTION, sum_envelope);
            SoapPrimitive sum_results = (SoapPrimitive)sum_envelope.getResponse();
            Log.d("sum_result", sum_results.toString());
          //  int in = Integer.parseInt(sum_results.getProperty(0).toString());
            tv3.setText(""+sum_results.toString());
        }
        catch (Exception e)
        {
            tv3.setText(e.getClass().toString());
            Log.d("sum_error", e.getClass().toString());
        }

    }

}