关闭

定位加上拉加载下拉刷新

315人阅读 评论(0) 收藏 举报

//

工具类解析json



///

import java.io.IOException;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class NewWorkUtils {

    private static String URL = "http://api.fang.anjuke.com/m/android/1.3/shouye/recInfosV3/?city_id=14&lat=40.04652&lng=116.306033&api_key=androidkey&sig=9317e9634b5fbc16078ab07abb6661c5&macid=45cd2478331b184ff0e15f29aaa89e3e&app=a-ajk&_pid=11738&o=PE-TL10-user+4.4.2+HuaweiPE-TL10+CHNC00B260+ota-rel-keys%2Crelease-keys&from=mobile&m=Android-PE-TL10&cv=9.5.1&cid=14&i=864601026706713&v=4.4.2&qtime=20160411091603&pm=b61&uuid=1848c59c-185d-48d9-b0e9-782016041109&_chat_id=0";

    public static String getData(int id) {
        String rs = "";
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet get = new HttpGet(
                    "http://api.fang.anjuke.com/m/android/1.3/shouye/recInfosV3/?city_id=14&lat=40.04652&lng=116.306033&api_key=androidkey&sig=9317e9634b5fbc16078ab07abb6661c5&macid=45cd2478331b184ff0e15f29aaa89e3e&app=a-ajk&_pid=11738&o=PE-TL10-user+4.4.2+HuaweiPE-TL10+CHNC00B260+ota-rel-keys%2Crelease-keys&from=mobile&m=Android-PE-TL10&cv=9.5.1&cid=14&i=864601026706713&v=4.4.2&qtime=20160411091603&pm=b61&uuid=1848c59c-185d-48d9-b0e9-782016041109&_chat_id="
                            + id);
            HttpResponse httpResponse = httpClient.execute(get);
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = httpResponse.getEntity();
                rs = EntityUtils.toString(entity, "utf-8");
            }
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs;
    }

}


///

mainactivity



///

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;

public class MainActivity extends Activity {

    private LocationClient mLocationClient = null;
    private BDLocationListener myListener = new MyLocationListener();
    private TextView cityName;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mLocationClient = new LocationClient(getApplicationContext());
        mLocationClient.registerLocationListener(myListener); // 注册监听函数
        initLocation();
        mLocationClient.start();

    }

    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
        int span = 1000;
        option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
        option.setOpenGps(true);// 可选,默认false,设置是否使用gps
        option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
        option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
        option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要
        mLocationClient.setLocOption(option);

        cityName = (TextView) findViewById(R.id.cityName);
        listView = (ListView) findViewById(R.id.listView);
        MyBaseAdapter1 adapter1 = new MyBaseAdapter1(getApplicationContext());
        // 设置适配器
        listView.setAdapter(adapter1);

        cityName.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 跳转到房源列表
                startActivity(new Intent(MainActivity.this, InfoActivity.class));
            }
        });

        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // 跳转到房源列表
                startActivity(new Intent(MainActivity.this, InfoActivity.class));
            }
        });
    }

    // 实现BDLocationListener
    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            // 展示定位城市
            cityName.setText(location.getCity());
        }
    }
}

//////////////


infoactivity

/////////////////////////


import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;

import com.example.yuekao_last.bean.MyResult;
import com.example.yuekao_last.bean.Rows;
import com.example.yuekao_last.utils.NewWorkUtils;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

public class InfoActivity extends Activity {
    private List<Rows> rows;
    int p = 1;
    private MyBaseAdapter myBaseAdapter;
    Handler handler = new Handler() {

        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case 1:
                rows = (List<Rows>) msg.obj;
                myBaseAdapter = new MyBaseAdapter(context, rows);
                pulltorefresh.setAdapter(myBaseAdapter);
                break;
            case 2:
                List<Rows> rows2 = (List<Rows>) msg.obj;
                rows.addAll(0, rows2);
                myBaseAdapter.notifyDataSetChanged();
                pulltorefresh.onRefreshComplete();
                break;
            case 3:
                List<Rows> rows3 = (List<Rows>) msg.obj;
                rows.addAll(rows3);
                myBaseAdapter.notifyDataSetChanged();
                pulltorefresh.onRefreshComplete();
                break;

            default:
                break;
            }
        };
    };
    private PullToRefreshListView pulltorefresh;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_info);
        context = getApplicationContext();

        init();
    }

    private void init() {
        // TODO Auto-generated method stub
        pulltorefresh = (PullToRefreshListView) findViewById(R.id.pulltorefresh);
        pulltorefresh.setMode(Mode.BOTH);
        myData(1, 0);
        pulltorefresh.setOnRefreshListener(new OnRefreshListener2<ListView>() {

            @Override
            public void onPullDownToRefresh(
                    PullToRefreshBase<ListView> refreshView) {
                myData(2, 0);
            }

            @Override
            public void onPullUpToRefresh(
                    PullToRefreshBase<ListView> refreshView) {

                myData(3, p++);
            }
        });
    }

    private void myData(final int what, final int id) {
        new Thread() {
            public void run() {
                String data = NewWorkUtils.getData(id);
                Gson gson = new Gson();
                MyResult myResult = gson.fromJson(data, MyResult.class);
                List<Rows> rows = myResult.getResult().getRows();
                handler.sendMessage(handler.obtainMessage(what, rows));
            };
        }.start();
    }

}

/////////////////////////////////

清单文件配置

/////////////////////////

  <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
    </uses-permission>




 <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="dFWiYuwGO23O1O1wxkqLW4wjiUuTBEX0" />
          <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>


////////////////////

imageLoader的简单加入

/////////////////////


import java.io.File;

import android.app.Application;
import android.graphics.Bitmap.Config;
import android.os.Environment;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

public class MyApplication extends Application{
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
    
        //sdcard的路径
        String sdPath=Environment.getExternalStorageDirectory().getPath();
    
        //自定义的方式
        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
        .memoryCacheExtraOptions(480, 800)//内存缓存文件的最大长宽
        .discCacheExtraOptions(480, 800, null)//本地缓存的详细信息
        .threadPoolSize(3)//线程池内加载的数量
        .threadPriority(Thread.NORM_PRIORITY-2)//设置当前线程的优先级
        .tasksProcessingOrder(QueueProcessingType.FIFO)//设置任务的处理顺序
        .denyCacheImageMultipleSizesInMemory()//防止内存中图片重复
        .memoryCache(new LruMemoryCache(2*1024*1024))//设置自己的内存缓存大小   2M
        .memoryCacheSize(2*1024*1024)
        .memoryCacheSizePercentage(13)//内存缓存百分比
        .discCache(new UnlimitedDiscCache(new File(sdPath+"/huang/image1")))//设置缓存的图片在sdcard中的位置
        .discCacheSize(50*1024*1024)//硬盘缓存大小    50M
        .discCacheFileCount(100)//硬盘缓存文件个数
        .discCacheFileNameGenerator(new Md5FileNameGenerator())//md5加密的方式,或new HashCodeFileNameGenerator()
        .imageDownloader(new BaseImageDownloader(this))
        .imageDecoder(new BaseImageDecoder(true))//图片解码
        .defaultDisplayImageOptions(getOption())//是否使用默认的图片加载配置,null表示不使用
        .writeDebugLogs()
        .build();

        //初始化
        ImageLoader.getInstance().init(configuration);

    }
    
    /*
    *  设置option
    */

    public static DisplayImageOptions getOption(){
        DisplayImageOptions option=new DisplayImageOptions.Builder()
        .showImageOnLoading(R.drawable.ic_launcher)//设置图片下载期间显示的图片
        .resetViewBeforeLoading(false)//设置图片在加载前是否重置、复位
        //.delayBeforeLoading(1000)//下载前的延迟时间
        .cacheInMemory(true)//设置下载的图片是否缓存在内存中
        .cacheOnDisk(true)//设置下载的图片是否缓存在sd卡中
        .considerExifParams(false)//思考可交换的参数
        .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)//设置图片的显示比例
        .bitmapConfig(Config.RGB_565)//设置图片的解码类型
        .displayer(new RoundedBitmapDisplayer(40))//设置图片的圆角半径
        .displayer(new FadeInBitmapDisplayer(3000))//设置图片显示的透明度过程的时间
        .build();
    
        return option;
    }
}



1
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4609次
    • 积分:114
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类