如何从服务器向客户端写入消息

时间:2010-09-14 05:04:58

标签: android

例如,在PC上的网站或软件中,你可以写一些新闻或其他东西,然后它会在你的android中更新

是否有任何关于此的示例或与之相关的教程

1 个答案:

答案 0 :(得分:0)

好吧,正如法尔马里已经说过的......这是一个非常模糊的问题。但是,我仍然可以给你一些发人深省的冲动:

您可以使用在特定时间周期内查询服务器的服务来检查是否有新消息。这会产生很多开销数据,因为即使没有任何消息,服务仍会询问服务器。计时器会这样做:

public Timer timerT = new Timer();
Handler updateNow;

TimerTask task = new TimerTask() {
  public void run() {
    updateNow.sendEmptyMessage(TICK);
  }
};  

updateNow = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
    case TICK:                  
        // Query wird gestartet
        new updateMsg().execute();
        break;
    }
  }
};      

// Fragt alle 60 Sekunden
timerT.scheduleAtFixedRate(task, 0, (60 * 1000));

Und die Abfrage an den Server:

public class updateMsg extends AsyncTask<String, String, Void> {            
    String message = "";

    protected void onPreExecute() { }

    protected Void doInBackground(String... data) {
       HttpReq request = Http.getInstance().createRequest();
       request.setUrl("http://www.deinserver.de/msg.php");
       request.setMethod("POST");

       request.addParam("fuer_name", "keenora");

       request.execute();

       message = request.getResult();           
       return null;         
    }

    protected void onPostExecute(Void unused) {
       Log.e("DEBUG", "Nachricht vom Server erhalten: " + message);
    }

    protected void onCancelled() { } 
}

Und nicht zu vergessen die Server-Seite:

<?php

  // Ganz dummes Script
  switch($_POST['fuer_name']) {
    case 'keenora': {
      echo 'Hallo!';
      break;
    }
    default: {
      echo 'Es gibt keine neuen Nachrichten!';
      break;
    }
  }

?>