设计方法:android和web服务

时间:2010-09-23 13:10:15

标签: android web-services rest

我正在开发一个与json / rest web服务通信的Android手机应用程序。我需要定期向服务器发出某些类型的呼叫以检查一些信息。 在这种情况下,我可能还需要向GPS查询当前位置。我还没有决定使用本地服务,因为我不太清楚如何处理它们,实际上我需要定期检索这些数据并相应地刷新MapView。 我听说我可以在服务中使用PendingIntents将这些数据作为有效载荷关联并将它们发送到解压缩数据并刷新UI的广播接收器,我还听说这是一个糟糕的设计方法,因为广播接收器是什么打算用于。 有没有人有一些有用的提示?

1 个答案:

答案 0 :(得分:2)

首先,您必须处理谷歌地图,因为您将显示地图视图。看看这个 Using Google Maps in Android on mobiForge

其次,你需要一个提供gps数据的类。使用消息处理程序获取位置数据和更新UI很简单。这是一个例子:

public MyGPS implements LocationListener{

    public LocationManager lm = null;
    private MainActivity SystemService = null;
    //lat, lng
    private double mLongitude = 0;
    private double mLatitude = 0;

    public MyGPS(MainActivity sservice){
        this.SystemService = sservice;
        this.startLocationService();
    }

    public void startLocationService(){
        this.lm = (LocationManager) this.SystemService.getSystemService(Context.LOCATION_SERVICE);
        this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, this);
    }

    public void onLocationChanged(Location location) {
        location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        try {
            this.mLongitude = location.getLongitude();
            this.mLatitude = location.getLatitude();
        } catch (NullPointerException e) {
            Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null);
        }
    }
}

在onCreate方法中,创建此类的实例,locationlistener将开始侦听gps更新。但是你不能访问lng和lat,因为你不知道你的活动是设置还是null。因此,当设置lat和lng时,您需要一个向主活动发送消息的处理程序:

使用以下方法修改:

public void onLocationChanged(Location location) {
        location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        try {
            this.mLongitude = location.getLongitude();
            this.mLatitude = location.getLatitude();
            Message msg = Message.obtain();
            msg.what = UPDATE_LOCATION;
            this.SystemService.myViewUpdateHandler.sendMessage(msg);
        } catch (NullPointerException e) {
            Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null);
        }
    }

在您的主要活动中添加以下内容:

Handler myViewUpdateHandler = new Handler(){

        public void handleMessage(Message msg) {
                switch (msg.what) {
                case UPDATE_LOCATION:
                //access lat and lng   
         }));
               }

                super.handleMessage(msg);
        }
};

由于处理程序位于mapactivity中,因此您可以在处理程序本身中轻松更新UI。每次gps数据都是可用的,处理程序会触发并接收消息。

开发REST API是一件非常有趣的事情。一种简单的方法是在Web服务器上有一个php脚本,根据请求返回一些json数据。如果您想开发此类服务,本教程可能会对您有所帮助,link