我在项目中要求使用.NET网站为Android应用程序配置主题。 我有的选项是实现从Android应用程序到服务器的轮询服务,该服务器经常轮询以查看是否需要进行任何更改。 可以任何人指出任何更好的方式或方法将数据从网站发送到Android应用程序,而不是经常轮询网站服务器的应用程序
答案 0 :(得分:3)
更好但更复杂的方法是使用Google Cloud Messaging(又称推送通知)。
通过这种方式,您的服务器可以通知应用程序有新数据需要检索,然后您的应用才能查询您的服务器。
这是一种更加电池友好的方法,效果非常好。我以前用过这个也是出于同样的原因。
为了回答一些评论,轮询是一个坏主意,因为
推送通知方法需要付出更多努力,但也有很大的优势。
答案 1 :(得分:1)
我会试试这个:
但很明显,第一个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());
}
}
}