我有一个总是检查Web服务的场景。如果DataBase中有更改,则应弹出警报消息。我已经完成了WHILE LOOP。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Push_notificaton();
}
public void Push_notificaton(){
while(true)
{
try
{
SoapObject request = new SoapObject("http://tempuri.org/","getMessage");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
//Web method call
HttpTransportSE androidHttpTransport = new HttpTransportSE("http://180.215.66.194/WebService.asmx");
androidHttpTransport.call("http://tempuri.org/"+ "getMessage", envelope);
//get the response
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
//the response object can be retrieved by its name: result.getProperty("objectName");
String message = (String)response.toString();
if(!currentMsg.equals(message))
{
currentMsg=message;
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Your Title");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
MessagesRequestActivity.this.finish();
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
alertDialog.setIcon(R.drawable.ic_launcher);
alertDialog.show();
}
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
e.printStackTrace();
}
但是由于连续循环,我无法获得输出。让我知道从中克服的任何其他方法。
答案 0 :(得分:2)
您应该使用云服务,它会自动将通知推送到您的Android应用程序,这可能会触发特定的实现或处理。
您应该查看GCM (Google Cloud Messaging)。
什么是GCM?
适用于Android的Google Cloud Messaging(GCM)是一项允许您使用的服务 将数据从您的服务器发送到用户的Android设备。 这可能是一条轻量级消息,告诉您的应用有新数据 从服务器获取(例如,由电影上传的电影) 朋友),或者它可能是一个包含最多4kb有效载荷数据的消息 (因此即时消息等应用可以直接使用消息)。该 上面的链接显示了您需要完成的步骤 使用谷歌配置你的应用程序。
显然,通过this tutorial查看mySQL和php,成功设置了一个用于GCM的应用程序
为什么要使用GCM及其优势?
如果您使用的是asp.net。您可以使用这段代码trigger the push
请记住,GCM implementation is very easy and can be quickly implemented。
答案 1 :(得分:1)
不要在ui-thread中对web服务做任何请求。将代码移动到Service或AsyncTask。前者更好。
这种方法耗能。至少,尝试使用sleep(someTime)发出请求。