• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android中sqlite之从网上获取数据更新UI

Android中sqlite之从网上获取数据更新UI

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android连接sqlite,android sqlite3,android sqlite,android sqlite使用,android中sqlite等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android中sqlite之从网上获取数据更新UI


Android中sqlite之从网上获取数据更新UI

在这里,本人主要想做一个
1、首先从网上获取数据
2、将获取的数据存储到本地
3、地图上显示屏幕范围内的marker。
4、当地图状态改变时,要查询本地数据库,并更新地图。

BaiduMap有个setOnMapStatusChangeListener监听类,该类监听BaiduMap的状态,共有三个方法——onMapStatusChangeStart(),onMapStatusChangeFinish(),onMapStatusChange()。

void onMapStatusChangeStart(MapStatus status)
手势操作地图,设置地图状态等操作导致地图状态开始改变。
参数:
status - 地图状态改变开始时的地图状态


void onMapStatusChange(MapStatus status)
地图状态变化中
参数:
status - 当前地图状态

void onMapStatusChangeFinish(MapStatus status)
地图状态改变结束
参数:
status - 地图状态改变结束后的地图状态

若BaiduMap状态改变,就会调用相应的函数。

其实这里有个笨方法,那就是每次地图状态改变,就从服务器获取数据,然后更新到地图上,但这样每次都要联网从服务器端获取数据,而且每次都要调用子线程,非常耗时间和内存,所以,本人想直接一次从服务器端获取数据,然后存在本地,每次地图状态改变时直接从本地获取数据然后更新到地图上,这样就会节约时间与内存。

但,子线程中从网络上获取的数据,怎么传给主线程呢?其实异步线程中有个方法很好实现这点。我们先来简单介绍一下异步线程的用法。

AsyncTask定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。

AsyncTask定义了几个方法

1、doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。

2、onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回,本例中关键是这个方法。

3、有必要的话你还得重写以下这三个方法,但不是必须的:
onProgressUpdate(Progress…)   可以使用进度条增加用户体验度。 此方法在主线程执             行,用于显示任务执行的进度。
onPreExecute()        这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
onCancelled()            用户调用取消时,要做的操作

4、使用AsyncTask类,以下是几条必须遵守的准则:

Task的实例必须在UI thread中创建;
execute方法必须在UI thread中调用;
不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;
该task只能被执行一次,否则多次调用时将会出现异常;

接下来,我们看看我想写的效果吧:

package com.yds.newpowerbike.fragment;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.Fragment;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.CircleOptions;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.Stroke;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.utils.DistanceUtil;
import com.yds.newpowerbike.R;
import com.yds.newpowerbike.bean.PolePoint;
import com.yds.newpowerbike.db.DBManager;
import com.yds.newpowerbike.net.ConnectServerIml;
import com.yds.newpowerbike.net.ShareData;
import com.yds.newpowerbike.util.JsonParse;

public class HomeFragment extends Fragment {
    private Activity activity;
    private MapView mMapView;
    public MyLocationListener myListener = new MyLocationListener(); 
    private DBManager mgr;
    BaiduMap mBaiduMap;
    LocationClient mLocClient;
    boolean isFirstLoc = true;
    boolean isLocationClientStop = false;
    ConnectServerIml iml;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreateView(inflater, container, savedInstanceState);
        this.activity = getActivity();
        SDKInitializer.initialize(activity.getApplicationContext());
        return inflater.inflate(R.layout.fragment_home, container,false);
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        mMapView = (MapView) activity.findViewById(R.id.mapview);
        mBaiduMap = mMapView.getMap();
        mBaiduMap.setMyLocationEnabled(true);
        //数据库操作——实例化DBManager
        mgr = new DBManager(activity);
        mLocClient = new LocationClient(activity);
        mLocClient.registerLocationListener(myListener);
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);
        option.setCoorType("bd09ll");//bd09LL
        option.setScanSpan(1000);
        mLocClient.setLocOption(option);
        mLocClient.start();

        asyncTask task = new asyncTask();
        task.execute();
    }
    class asyncTask extends AsyncTask{

        @Override
        protected DBManager doInBackground(LatLng... params) {
            // TODO Auto-generated method stub
            //充电桩服务器查询
            iml = new ConnectServerIml();
            String url = ShareData.CHARGE_SEARCH;
            String result = iml.ConcernByClientGet(url);
            //json数据解析
            ArrayList list = JsonParse.search(result);
            //数据库操作——插入数据
            mgr.add(list);
            return mgr;
        }
        @Override
        protected void onPostExecute(final DBManager mgr) {
            // TODO Auto-generated method stub
            super.onPostExecute(mgr);

            final Listlist = mgr.query();
            mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {
                //地图状态改变前


                Marker marker;
                int length = list.size();
                @Override
                public void onMapStatusChangeStart(MapStatus status) {
                    // TODO Auto-generated method stub
                }
                //地图状态改变后
                @Override
                public void onMapStatusChangeFinish(MapStatus status) {
                    // TODO Auto-generated method stub
                    LatLng mCenter = status.target;
                    //数据库操作——数据查询
                    for (int i = 0; i < length; i++) {
                        String pt = list.get(i).PoleFix;
                        double lat = iml.getLat(pt);
                        double lng = iml.getLng(pt);
                        //marker的经纬度
                        LatLng pt_ll = new LatLng(lat, lng);
                        //获得marker与圆中心点之间的距离。
                        double distance = DistanceUtil.getDistance(pt_ll, mCenter);
                        //圆的半径是8000,这里为美观取760



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android之SQLite数据存储,androidsqlite
  • Android之SQLite数据库篇,androidsqlite
  • Android中sqlite之从网上获取数据更新UI
  • Android 数据库SQLite 写入SD卡,androidsqlite

相关文章

  • 2017-05-26nginx rewrite常用示例
  • 2017-05-26Android 环境搭建 以及 第一个android 程序的编写,搭建android
  • 2017-05-26android基于口令加密快速搞懂(一),android搞懂
  • 2017-05-26Android:让WebView支持&lt;input type=”file”…&gt;元素,androidwebview
  • 2017-05-26硅谷社交12--群列表页面,硅谷社交12--列表
  • 2017-05-26Android之解析XML,androidxml
  • 2017-07-22Android深入四大组件(五)ContentProvider的启动过程
  • 2017-05-26PagerTabStrip在ViewPager的页面中添加标题显示,viewpager添加页面
  • 2017-05-26android不同的按钮一起点击崩溃解决,android一起
  • 2017-05-26读《重构手册》-重构之姊妹篇有感,《重构手册》姊妹篇

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 工具包 xUtils 3.3.16,xutils3.3.16
    • Android Studio SugarORM No Such Table,androidsugarorm
    • 7.2.1 Android XML数据解析
    • StringBuffer工具类整理(一),stringbuffer工具类
    • did not call through to super.onCreate(),didsuper.oncreate
    • MVP模式在Android开发中的最佳实践
    • Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效
    • andriod Spinner,andriodspinner
    • 用Android studio进行 OpenCV 开发的第一个项目,androidopencv
    • View的事件分发机制,View事件分发机制

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有