搜索

----------model

package bwie.com.moni320180914.di.model;


import java.io.IOException;

import bwie.com.moni320180914.data.utils.OkHttpUtil;
import bwie.com.moni320180914.di.IContract;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Response;

public class ModelImpl implements IContract.IModel{
    private static final String URL="https://restapi.amap.com/v3/place/around?key=d78f39012867929dc6ad174dd498f51f&location=116.473168,39.993015&keywords=%E7%BE%8E%E9%A3%9F&types=&radius=1000&offset=20&page=1&extensions=all";
    private static final String BASE_URL = "https://restapi.amap.com/v3/place/around";
    @Override
    public void requestData(final onCallBacklisenter onCallBacklisenter) {
        OkHttpUtil.getInstance().get(URL, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                String estring = e.getMessage().toString();
                onCallBacklisenter.stringMsg(estring);
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseString = response.body().string();
                onCallBacklisenter.stringMsg(responseString);
            }
        });
    }

    @Override
    public void requestDataPost(String keyworkd,final onCallBacklisenter onCallBacklisenter) {
        FormBody formBody = new FormBody.Builder()
                .add("key","d78f39012867929dc6ad174dd498f51f")
                .add("location","116.473168,39.993015")
                .add("keywords",keyworkd)
                .add("types","")
                .add("radius","1000")
                .add("offset","20")
                .add("page","1")
                .add("extensions","all")
                .build();
        OkHttpUtil.getInstance().post(BASE_URL, formBody, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                String estring = e.getMessage().toString();
                onCallBacklisenter.stringMsg(estring);
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseString = response.body().string();
                onCallBacklisenter.stringMsg(responseString);
            }
        });
    }
}

 

---presenter

package bwie.com.moni320180914.di.presenter;

import java.lang.ref.WeakReference;

import bwie.com.moni320180914.di.IContract;
import bwie.com.moni320180914.di.model.ModelImpl;

public class PresenterImpl implements IContract.IPersenter<IContract.IView> {
    IContract.IView iView;
    private IContract.IModel iModel;
    private WeakReference<IContract.IView> iViewWeakReference;
    private WeakReference<IContract.IModel> iModelWeakReference;

    @Override
    public void AttData(IContract.IView iView) {
        this.iView = iView;
        iModel = new ModelImpl();
        iViewWeakReference = new WeakReference<>(iView);
        iModelWeakReference = new WeakReference<>(iModel);
    }

    @Override
    public void DeleteData(IContract.IView iView) {
        iViewWeakReference.clear();
        iModelWeakReference.clear();
    }

    @Override
    public void infoData() {
        iModel.requestData(new IContract.IModel.onCallBacklisenter() {
            @Override
            public void stringMsg(String Msg) {
                iView.showData(Msg);
            }
        });
    }

    @Override
    public void infoPost(String keywords) {
        iModel.requestDataPost(keywords,new IContract.IModel.onCallBacklisenter() {
            @Override
            public void stringMsg(String Msg) {
                iView.showData(Msg);
            }
        });
    }
}

接口 icontract

public interface IContract {
interface IView{
  void showData(String msg);
}
interface IPersenter<IView>{
    void AttData(IView iView);
    void DeleteData(IView iView);
    void infoData();
    void infoPost(String keywords);
}
interface IModel{
    interface onCallBacklisenter{
      void stringMsg(String Msg);
    }
    void requestData(onCallBacklisenter onCallBacklisenter);
    void requestDataPost(String keywords, onCallBacklisenter onCallBacklisenter);

    }

---view

package bwie.com.moni320180914.ui.activity;

import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.google.gson.Gson;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import bwie.com.moni320180914.R;
import bwie.com.moni320180914.data.bean.InfoBean;
import bwie.com.moni320180914.di.IContract;
import bwie.com.moni320180914.di.presenter.PresenterImpl;
import bwie.com.moni320180914.ui.adapter.MainAdapters;

public class MainActivity extends AppCompatActivity implements IContract.IView, AMapLocationListener {

    private static final int REQUST_CODE_LOGIN = 1000;
    @BindView(R.id.m_search)
    ImageView mSearch;
    @BindView(R.id.main_mao)
    ImageView mainMao;
    @BindView(R.id.reacycle_view)
    RecyclerView reacycleView;
    @BindView(R.id.et_search)
    EditText etSearch;
    @BindView(R.id.tv_location)
    TextView tvLocation;
    private IContract.IPersenter iPersenter;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_WIFI_STATE}, 200);
        }
        initLocation();
        ButterKnife.bind(this);
        iPersenter = new PresenterImpl();
        iPersenter.AttData(this);
        // iPersenter.infoData();
        iPersenter.infoPost("美食");
        recyclerView = findViewById(R.id.reacycle_view);
    }



    @Override
    public void showData(final String msg) {
        Log.i("aa", "showData: " + msg);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Gson gson = new Gson();
                InfoBean infoBean = gson.fromJson(msg, InfoBean.class);
                List<InfoBean.Pois> data = infoBean.getPois();

                LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
                layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                recyclerView.setLayoutManager(layoutManager);

                MainAdapters mainAdapter = new MainAdapters(data, MainActivity.this);
                recyclerView.setAdapter(mainAdapter);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        iPersenter.DeleteData(this);
    }

    @OnClick({R.id.m_search, R.id.main_mao,R.id.tv_location})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.m_search:
                String keywords = etSearch.getText().toString();
                if (!TextUtils.isEmpty(keywords)) {
                    iPersenter.infoPost(keywords);
                }
                //  iPersenter.infoPost();
                break;
            case R.id.main_mao:
                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                // startActivity(intent);
                startActivityForResult(intent, REQUST_CODE_LOGIN);
                break;
            case R.id.tv_location:
                mlocationClient.startLocation();
                break;
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUST_CODE_LOGIN && resultCode == RESULT_OK) {
            String iconurl = data.getStringExtra("iconurl");
            // Picasso.with(this).load(iconurl).into(mainMao);
            Glide.with(this).load(iconurl).apply(new RequestOptions().circleCrop()).into(mainMao);
        }
    }

    //声明mLocationOption对象
    public AMapLocationClientOption mLocationOption = null;
    //声明mlocationClient对象
    public AMapLocationClient mlocationClient;
    private void initLocation() {
        //初始化定位参数
        mLocationOption = new AMapLocationClientOption();
        //设置返回地址信息,默认为true
        mLocationOption.setNeedAddress(true);
        mlocationClient = new AMapLocationClient(this);
        //设置定位监听
        mlocationClient.setLocationListener(this);
        //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption.setInterval(10000);
        //设置定位参数
        mlocationClient.setLocationOption(mLocationOption);
        // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
        // 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求
        // 在定位结束后,在合适的生命周期调用onDestroy()方法
        // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
        //启动定位
    }




        @Override
        public void onLocationChanged(AMapLocation amapLocation) {
             if (amapLocation != null) {
                if (amapLocation.getErrorCode() == 0) {
                     //定位成功回调信息,设置相关消息
                    amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                    amapLocation.getLatitude();//获取纬度
                    amapLocation.getLongitude();//获取经度
                    amapLocation.getAccuracy();//获取精度信息
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = new Date(amapLocation.getTime());
                    df.format(date);//定位时间
                    String address = amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                    String country = amapLocation.getCountry();//国家信息
                    amapLocation.getProvince();//省信息
                    amapLocation.getCity();//城市信息
                    amapLocation.getDistrict();//城区信息
                    amapLocation.getStreet();//街道信息
                    amapLocation.getStreetNum();//街道门牌号信息
                    amapLocation.getCityCode();//城市编码
                    amapLocation.getAdCode();//地区编码
                   // amapLocation.getAOIName();//获取当前定位点的AOI信息
                    //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                    Log.e("AmapSuccess","address:"
                            + address + ", country:"
                            + country);
                    Toast.makeText(this, "address:"
                            + address + ", country:"
                            + country, Toast.LENGTH_SHORT).show();
                    tvLocation.setText(address);
            } else {
                //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                Log.e("AmapError","location Error, ErrCode:"
                        + amapLocation.getErrorCode() + ", errInfo:"
                        + amapLocation.getErrorInfo());
            }
        }
    }

}

---adapter

package bwie.com.moni320180914.ui.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.List;

import bwie.com.moni320180914.R;
import bwie.com.moni320180914.data.bean.InfoBean;

public class MainAdapters extends RecyclerView.Adapter<MainAdapters.ViewHolder> {
    List<InfoBean.Pois> data;
    Context context;
    private ViewHolder viewHolder;

    public MainAdapters(List<InfoBean.Pois> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.activity_list, parent, false);
        viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.listtitie.setText(data.get(position).getName());
        holder.listtupiao.setText(data.get(position).getDistance() + "m");
        List<InfoBean.Pois.Photo> photos = data.get(position).getPhotos();
        if (photos != null && photos.size() > 0) {
            Picasso.with(context).load(photos.get(0).getUrl()).into(holder.imageView);
        }
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView imageView;
        private TextView listtitie;
        private TextView listtupiao;

        public ViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.list_img);
            listtitie = itemView.findViewById(R.id.list_title);
            listtupiao = itemView.findViewById(R.id.list_tupiao);
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="bwie.com.moni320180914">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <application
        android:name=".data.App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ui.activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ui.activity.LoginActivity" />
        <activity android:name=".ui.activity.MapActivity"></activity>
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencent100424468" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>

        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="f81113feabf3031ac8af72c9ecdaccb6"/>

        <service android:name="com.amap.api.location.APSService"></service>
    </application>

    <!--用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!--用于写入缓存数据到扩展存储卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
    <!--用于申请获取蓝牙信息进行室内定位-->
    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
</manifest>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值