AsyncTask+HttpUrlConnection网络请求解析XML且定位

本文介绍了一个Android应用案例,该应用集成了百度地图的定位功能与第三方图书API服务,实现了用户地理位置获取及图书信息展示。应用通过HTTP请求从远程服务器获取图书数据并解析XML响应,将图书信息列表展示给用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.location;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
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;
import com.baidu.mapapi.SDKInitializer;
import com.example.adapter.MyListAdapter;
import com.example.bean.Book;
import com.example.bean.BookAll;
import com.thoughtworks.xstream.XStream;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity{

    private TextView text;
    public LocationClient mLocationClient = null;
    public BDLocationListener myListener = new MyLocationListener();
    String path="http://apis.juhe.cn/goodbook/catalog?key=9d6ef8c31647a206e05fcaff70527182&dtype=xml";
    List<Book> list;
    ListView listview;
    long mExitTime;

    @Override
    protected void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState); 
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        listview=(ListView) findViewById(R.id.listview);
        text=(TextView) findViewById(R.id.text);

        Dingwei();
        new getAsyTask().execute();
        listview.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                Intent it=new Intent(MainActivity.this,InfoActivity.class);
                it.putExtra("id",list.get(position).getId());
                startActivity(it);
            }
        });
    }


    //联网请求操作
    private class getAsyTask extends AsyncTask<String,Integer,InputStream>{
        @Override
        protected InputStream doInBackground(String... params) {
            // TODO Auto-generated method stub
            InputStream inputStream=null;
            try {
                URL url=new URL(path);
                try {
                    HttpURLConnection connection=(HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    connection.connect();
                    if(connection.getResponseCode()==200){
                        inputStream=connection.getInputStream();
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (MalformedURLException e){
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return inputStream;
        }
        @Override
        protected void onPostExecute(InputStream result){
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            initdata(result);
            MyListAdapter mylistadapter=new MyListAdapter(MainActivity.this, list);
            listview.setAdapter(mylistadapter);
        }
    }

    //解析数据
    private void initdata(InputStream stream){
        XStream xs=new XStream();
        xs.processAnnotations(BookAll.class);
        BookAll bookall=(BookAll) xs.fromXML(stream);
        list=bookall.getResult().getItem();
    }

    //设置定位
    private void Dingwei(){
        mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
        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);
    }

    public class MyLocationListener implements BDLocationListener{       
           public void onReceiveLocation(BDLocation location) {
            text.setText(location.getCity());

           }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值