Android使用高德与和风天气实现定位实况数据显示 简易新闻(十)

  • 关于
    • 效果图
    • 第一步,添加和风引用
    • 第二步,修改AndroidManifest.xml
    • 第三步,修改activity_main.xml文件
    • 第四步,修改MainActivity.java

关于

本篇的内容有:

1. 实现高德定位
2. 实现高德联合和风天气获取定位实况天气数据
3. 将上一篇的用户反馈优化放到简易新闻app上
由于之前的几篇已经详细介绍如何使用高德定位,如何使用和风天气sdk(Android使用高德和风天气Sdk获取定位实况天气数据(二))所以本篇就简单说明pull一下代码。

效果图


由于篇幅原因就简单的看一下。

第一步,添加和风引用

具体的这些引用都在前面文章中详细介绍了,这里只是简单介绍。
我们再控制台下载最新的天气sdkjar包v3.1然后复制到libs文件夹中后添加到library中如图:

在项目的build.gradle下添加引用如下:

implementation 'com.squareup.okhttp3:okhttp:3.14.0'implementation 'com.google.code.gson:gson:2.6.2'implementation 'com.github.bumptech.glide:glide:4.2.0'
//高德定位及3D地图implementation 'com.amap.api:3dmap:latest.integration'implementation 'com.amap.api:location:latest.integration'//第三方弹出框implementation 'com.afollestad.material-dialogs:core:0.9.6.0'//这个是将和风sdk添加为library中自动生成的implementation files('libs/HeWeather_Public_Android_V3.1.jar')

第二步,修改AndroidManifest.xml

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

在application内添加如下:

 <!-- 在application标签中声明service组件,每个app拥有自己单独的定位service --><service android:name="com.amap.api.location.APSService" /><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="bdd54858e0fccbbe928fd3795d72adfe" />

第三步,修改activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"tools:openDrawer="start"tools:context=".MainActivity"><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_height="?attr/actionBarSize"android:layout_width="match_parent"//自己定义的颜色,随你自己喜欢定义android:background="@color/title"app:titleTextColor="@color/colorWhite"><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="right|center_vertical"android:layout_marginLeft="14dp"android:gravity="right"><TextViewandroid:id="@+id/tv_tianqi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:textColor="@color/white"/><ImageViewandroid:id="@+id/img_weather"android:layout_width="17dp"android:layout_gravity="center_vertical"android:layout_height="17dp"/><TextViewandroid:id="@+id/tv_kongqi"android:layout_width="wrap_content"android:layout_gravity="center_vertical"android:layout_height="wrap_content"android:textColor="@color/white"/><TextViewandroid:id="@+id/tv_airqlty"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:textColor="@color/white"/><!-- <ImageViewandroid:id="@+id/image_exit"android:layout_width="20dp"android:layout_height="20dp"android:layout_gravity="center_vertical"android:background="@drawable/exit" />--></LinearLayout></android.support.v7.widget.Toolbar><!--其中的 app:titleTextColor="@color/colorRed"是我自己在color中设置了颜色属性值为#F00--><android.support.design.widget.TabLayoutandroid:id="@+id/tabLayout"android:layout_width="match_parent"android:layout_height="60dp"app:tabMode="scrollable"app:tabSelectedTextColor="#FF0000"app:tabTextColor="#000000"></android.support.design.widget.TabLayout><android.support.v4.view.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="wrap_content"></android.support.v4.view.ViewPager></LinearLayout><android.support.design.widget.NavigationViewandroid:id="@+id/nav_design"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="start"app:headerLayout="@layout/nav_header"app:menu="@menu/nav_menu"/>
</android.support.v4.widget.DrawerLayout>

第四步,修改MainActivity.java

package com.example.frametest;import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import com.afollestad.materialdialogs.MaterialDialog;
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.cazaea.sweetalert.SweetAlertDialog;
import com.example.frametest.PersonSettings.HomeSettingsActivity;
import com.example.frametest.UserMode.LoginActivity;
import com.example.frametest.UserMode.User;
import com.example.frametest.UserMode.UserFavoriteActivity;
import com.example.frametest.UserMode.User_DataActivity;
import com.example.frametest.UserMode.User_LogoutActivity;
import com.example.frametest.tools.ActivityCollector;
import com.example.frametest.tools.BasicActivity;
import com.example.frametest.tools.ClearMessageUtil;
import com.example.frametest.tools.DBOpenHelper;
import com.example.frametest.tools.MyApplication;
import com.example.frametest.tools.ToastUtil;
import com.google.gson.Gson;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import de.hdodenhof.circleimageview.CircleImageView;
import interfaces.heweather.com.interfacesmodule.bean.Lang;
import interfaces.heweather.com.interfacesmodule.bean.Unit;
import interfaces.heweather.com.interfacesmodule.bean.air.now.AirNow;
import interfaces.heweather.com.interfacesmodule.bean.weather.now.Now;
import interfaces.heweather.com.interfacesmodule.view.HeWeather;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class MainActivity extends BasicActivity {private android.support.v7.widget.Toolbar toolbar;private DrawerLayout mDrawerLayout;private NavigationView navigationView;private TabLayout tabLayout;private ViewPager viewPager;private List<String> list;private TextView tvhuoqu,tvName;String phonenumber,userName;private static final int USER_LOOK_NAME = 0;private static final int USER_FEEDBACK = 1;private static final int USER_ISNULL = 2;private static boolean mBackKeyPressed = false;//记录是否有首次按键private TextView tv_tianqi,tv_kongqi,tv_airqlty;ImageView image_weather,image_exit;public AMapLocationClient mLocationClient=null;//声明定位回调监听器public AMapLocationClientOption mLocationOption=null;private   String CityId;static Context mContext;@SuppressLint("HandlerLeak")private Handler userFeedHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {String admin_title,admin_url,user_name;switch (msg.what){case USER_LOOK_NAME:User user = (User) msg.obj;user_name =user.getUser_name();tvName = (TextView) findViewById(R.id.text_username);tvName.setText(user_name);break;case USER_FEEDBACK:Toast.makeText(MainActivity.this,"反馈成功",Toast.LENGTH_SHORT).show();break;case USER_ISNULL:Toast.makeText(MainActivity.this,"用户未登录!",Toast.LENGTH_SHORT).show();break;default:break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext =getApplicationContext();initMap();toolbar =  findViewById(R.id.toolbar);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); //获取抽屉布局navigationView = (NavigationView) findViewById(R.id.nav_design);//获取菜单控件实例View v = navigationView.getHeaderView(0);CircleImageView circleImageView =(CircleImageView) v.findViewById(R.id.icon_image);tabLayout = (TabLayout) findViewById(R.id.tabLayout);viewPager = (ViewPager) findViewById(R.id.viewPager);list = new ArrayList<>();tvhuoqu = (TextView) findViewById(R.id.text_huoqu);tv_tianqi =(TextView) findViewById(R.id.tv_tianqi);tv_kongqi =(TextView) findViewById(R.id.tv_kongqi);image_weather =(ImageView) findViewById(R.id.img_weather);tv_airqlty =(TextView) findViewById(R.id.tv_airqlty);}private void initMap() {//初始化定位mLocationClient=new AMapLocationClient(MainActivity.this);//设置定位回调监听mLocationClient.setLocationListener(mLocationListener);mLocationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);mLocationOption.setNeedAddress(true);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setOnceLocation(false);//设置是否只定位一次,默认为falsemLocationOption.setWifiActiveScan(true);//设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setMockEnable(false);//设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setInterval(15000);//设置定位间隔,单位毫秒,默认为2000msmLocationOption.setOnceLocation(false);//可选,是否设置单次定位默认为false即持续定位mLocationOption.setOnceLocationLatest(false); //可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用mLocationOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差mLocationOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为true
//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);
//启动定位mLocationClient.startLocation();}public AMapLocationListener mLocationListener=new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (aMapLocation != null) {if (aMapLocation.getErrorCode() == 0) {//定位成功回调信息,设置相关消息aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表// aMapLocation.getLatitude();//获取纬度// aMapLocation.getLongitude();//获取经度aMapLocation.getAccuracy();//获取精度信息java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//  aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。//  aMapLocation.getCountry();//国家信息//  aMapLocation.getProvince();//省信息//  aMapLocation.getCity();//城市信息//   aMapLocation.getDistrict();//城区信息//    aMapLocation.getStreet();//街道信息//     aMapLocation.getStreetNum();//街道门牌号信息//    aMapLocation.getCityCode();//城市编码//     aMapLocation.getAdCode();//地区编码//获取经纬度double  LongitudeId = aMapLocation.getLongitude();double LatitudeId = aMapLocation.getLatitude();//获取定位城市定位的IDrequestCityInfo(LongitudeId,LatitudeId);mLocationClient.stopLocation();//停止定位} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("info", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}};public void  requestCityInfo(double longitude,double latitude){//这里的key是webapi keyString cityUrl = "https://search.heweather.net/find?location="+longitude+","+latitude+"&key=6529091f5dc44fbc94d900dc2ca67e96";sendRequestWithOkHttp(cityUrl);}//解析根据经纬度获取到的含有城市id的json数据private void sendRequestWithOkHttp(String cityUrl) {new Thread(new Runnable() {@Overridepublic void run() {OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(cityUrl).build();try {Response response = okHttpClient.newCall(request).execute();//返回城市列表json数据String responseData = response.body().string();System.out.println("变成json数据的格式:"+responseData);JSONObject jsonWeather = null;try {jsonWeather = new JSONObject(responseData);JSONArray jsonArray = jsonWeather.getJSONArray("HeWeather6");JSONObject jsonObject = jsonArray.getJSONObject(0);String jsonStatus = jsonObject.getString("status");if (jsonStatus.equals("ok")){JSONArray jsonBasic = jsonObject.getJSONArray("basic");JSONObject jsonCityId = jsonBasic.getJSONObject(0);CityId = jsonCityId.getString("cid");getWether();}} catch (JSONException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}}}).start();}private void getWether() {/*** 实况天气* 实况天气即为当前时间点的天气状况以及温湿风压等气象指数,具体包含的数据:体感温度、* 实测温度、天气状况、风力、风速、风向、相对湿度、大气压强、降水量、能见度等。** @param context  上下文* @param location 地址详解* @param lang       多语言,默认为简体中文* @param unit        单位选择,公制(m)或英制(i),默认为公制单位* @param listener  网络访问回调接口*/HeWeather.getWeatherNow(MainActivity.this, CityId,  Lang.CHINESE_SIMPLIFIED , Unit.METRIC , new HeWeather.OnResultWeatherNowBeanListener() {public static final String TAG="he_feng_now";@Overridepublic void onError(Throwable e) {Log.i(TAG, "onError: ", e);System.out.println("Weather Now Error:"+new Gson());}@Overridepublic void onSuccess(Now dataObject) {Log.i(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));String jsonData = new Gson().toJson(dataObject);System.out.println("返回的数据内容:"+dataObject.getStatus());String tianqi = null,wendu = null, tianqicode = null;if (dataObject.getStatus().equals("ok")){String JsonNow = new Gson().toJson(dataObject.getNow());JSONObject jsonObject = null;try {jsonObject = new JSONObject(JsonNow);tianqi = jsonObject.getString("cond_txt");wendu = jsonObject.getString("tmp");tianqicode = jsonObject.getString("cond_code");} catch (JSONException e) {e.printStackTrace();}}else {Toast.makeText(MainActivity.this,"有错误",Toast.LENGTH_SHORT).show();return;}String wendu2 = wendu +"℃";tv_tianqi.setText(tianqi);tv_kongqi.setText(wendu2);String tagurl = "https://cdn.heweather.com/cond_icon/" +tianqicode+".png";Glide.with(MainActivity.this).load(tagurl).into(image_weather);}});HeWeather.getAirNow(MainActivity.this, CityId, Lang.CHINESE_SIMPLIFIED, Unit.METRIC, new HeWeather.OnResultAirNowBeansListener() {public static final String TAG2="he_feng_air";@Overridepublic void onError(Throwable throwable) {Log.i(TAG2,"ERROR IS:",throwable);}@Overridepublic void onSuccess(AirNow airNow) {Log.i(TAG2,"Air Now onSuccess:"+new Gson().toJson(airNow));String airStatus = airNow.getStatus();if (airStatus.equals("ok")){String jsonData = new Gson().toJson(airNow.getAir_now_city());String aqi = null,qlty = null;JSONObject objectAir = null;try {objectAir = new JSONObject(jsonData);aqi = objectAir.getString("aqi");qlty = objectAir.getString("qlty");tv_airqlty.setText(qlty+"("+aqi+")");} catch (JSONException e) {e.printStackTrace();}}else {Toast.makeText(MainActivity.this,"有错误",Toast.LENGTH_SHORT).show();return;}}});}@Overrideprotected void onStart() {super.onStart();/* toolbar.setLogo(R.drawable.icon);//设置图片logo,你可以添加自己的图片*/toolbar.setTitle("简易新闻");setSupportActionBar(toolbar);ActionBar actionBar = getSupportActionBar();if (actionBar !=null){//通过HomeAsUp来让导航按钮显示出来actionBar.setDisplayHomeAsUpEnabled(true);//设置Indicator来添加一个点击图标actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_24dp);}navigationView.setCheckedItem(R.id.nav_call);//设置第一个默认选中navigationView.setNavigationItemSelectedListener(new  NavigationView.OnNavigationItemSelectedListener() {//设置菜单项的监听事件@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {mDrawerLayout.closeDrawers();switch (menuItem.getItemId()) {case R.id.nav_call:phonenumber = MyApplication.getMoublefhoneUser();//通过判断手机号是否存在,来决定是进入编辑资料页面还是进入登陆页面if (phonenumber != null){Intent unIntent = new Intent(MainActivity.this,User_DataActivity.class);unIntent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);startActivity(unIntent);} else {Intent exitIntent = new Intent(MainActivity.this,LoginActivity.class);exitIntent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);startActivity(exitIntent);}break;case R.id.nav_friends:Intent settingIntent = new Intent(MainActivity.this,HomeSettingsActivity.class);settingIntent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);startActivity(settingIntent);break;case R.id.nav_location:Toast.makeText(MainActivity.this, "你点击了发布新闻,下步实现", Toast.LENGTH_SHORT).show();break;case R.id.nav_favorite:phonenumber = MyApplication.getMoublefhoneUser();if (phonenumber != null){Intent userFavIntent = new Intent(MainActivity.this,UserFavoriteActivity.class);startActivity(userFavIntent);} else {Intent exitIntent = new Intent(MainActivity.this,LoginActivity.class);startActivity(exitIntent);}break;case R.id.nav_settings:      // Intent logoutIntent = new Intent(MainActivity.this,User_LogoutActivity.class);//  startActivity(logoutIntent);//  Toast.makeText(MainActivity.this,"需要做出注销功能,可扩展夜间模式,离线模式等,检查更新",Toast.LENGTH_LONG).show();break;case R.id.nav_exit:Intent intent = new Intent(MainActivity.this,LoginActivity.class);//intent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);startActivity(intent);break;default:}return true;}});list.add("头条");list.add("社会");list.add("国内");list.add("国际");list.add("娱乐");list.add("体育");list.add("军事");list.add("科技");list.add("财经");/* viewPager.setOffscreenPageLimit(1);*/viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {//得到当前页的标题,也就是设置当前页面显示的标题是tabLayout对应标题@Nullable@Overridepublic CharSequence getPageTitle(int position) {return list.get(position);}@Overridepublic Fragment getItem(int position) {NewsFragment newsFragment = new NewsFragment();//判断所选的标题,进行传值显示Bundle bundle = new Bundle();if (list.get(position).equals("头条")){bundle.putString("name","top");}else if (list.get(position).equals("社会")){bundle.putString("name","shehui");}else if (list.get(position).equals("国内")){bundle.putString("name","guonei");}else if (list.get(position).equals("国际")){bundle.putString("name","guoji");}else if (list.get(position).equals("娱乐")){bundle.putString("name","yule");}else if (list.get(position).equals("体育")){bundle.putString("name","tiyu");}else if (list.get(position).equals("军事")){bundle.putString("name","junshi");}else if (list.get(position).equals("科技")){bundle.putString("name","keji");}else if (list.get(position).equals("财经")){bundle.putString("name","caijing");}else if (list.get(position).equals("时尚")){bundle.putString("name","shishang");}newsFragment.setArguments(bundle);return newsFragment;}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {NewsFragment newsFragment = (NewsFragment)  super.instantiateItem(container, position);return newsFragment;}@Overridepublic int getItemPosition(@NonNull Object object) {return FragmentStatePagerAdapter.POSITION_NONE;}@Overridepublic int getCount() {return list.size();}});//TabLayout要与ViewPAger关联显示tabLayout.setupWithViewPager(viewPager);String inputText = load();if (!TextUtils.isEmpty(inputText)){System.out.println("________)))))))");System.out.println("________)))))))");System.out.println(phonenumber);phonenumber =inputText;MyApplication.setMoublefhoneUser(phonenumber);}}    @Overridepublic boolean onCreateOptionsMenu(Menu menu) {//获取toolbar菜单项getMenuInflater().inflate(R.menu.toolbar,menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()){//R.id.home修改导航按钮的点击事件为打开侧滑栏case android.R.id.home:if (MyApplication.getMoublefhoneUser() != null){phonenumber = MyApplication.getMoublefhoneUser();}mDrawerLayout.openDrawer(GravityCompat.START);  //打开侧滑栏tvhuoqu = (TextView) findViewById(R.id.text_huoqu);tvhuoqu.setText(phonenumber);//用户开启侧滑栏时,查询数据库对应手机号的用户名,并显示在侧滑栏头部new Thread(new Runnable() {@Overridepublic void run() {Connection conn = null;conn = (Connection) DBOpenHelper.getConn();String sql = "select user_name from user_info where  user_phone ='"+phonenumber+"'";Statement pstmt;try {pstmt = (Statement) conn.createStatement();ResultSet rs = pstmt.executeQuery(sql);while (rs.next()){User user = new User();user.setUser_name(rs.getString(1));//此处优化方法,去掉以前的new Message()这样会不断地新增一个Handle增加内存空间响应时间//Message msg = userFeedHandler.obtainMessage();msg.what=USER_LOOK_NAME;msg.obj = user;userFeedHandler.sendMessage(msg);}pstmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}}).start();break;case R.id.userFeedback:new MaterialDialog.Builder(MainActivity.this).title("意见反馈").inputRangeRes(2,20,R.color.yellow).inputType(InputType.TYPE_CLASS_TEXT).input("请输入反馈信息", null, new MaterialDialog.InputCallback() {@Overridepublic void onInput(@NonNull MaterialDialog dialog, CharSequence input) {new Thread(new Runnable() {@Overridepublic void run() {String input_text = input.toString();if ("".equals(MyApplication.getMoublefhoneUser()) || MyApplication.getMoublefhoneUser() == null) {Message msg = Message.obtain();msg.what =USER_ISNULL;userFeedHandler.sendMessage(msg);} else if ("".equals(input_text) || input_text == null) {Message msg = Message.obtain();msg.what =USER_FEEDBACK;userFeedHandler.sendMessage(msg);}else {Connection conn = null;conn = (Connection) DBOpenHelper.getConn();String sql = "insert into user_feedback(user_feed,user_phone) values(?,?)";int i = 0;PreparedStatement pstmt;try {pstmt = (PreparedStatement) conn.prepareStatement(sql);pstmt.setString(1, input_text);pstmt.setString(2,MyApplication.getMoublefhoneUser());i = pstmt.executeUpdate();pstmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}Message msg = Message.obtain();msg.what =USER_FEEDBACK;userFeedHandler.sendMessage(msg);}}}).start();}}).positiveText("确定").negativeText("取消").show();break;case R.id.userExit:break;default:break;}return true;}public String load() {FileInputStream in = null;BufferedReader reader = null;StringBuilder content = new StringBuilder();try {in = openFileInput("data");System.out.println("是否读到文件内容"+in);reader = new BufferedReader(new InputStreamReader(in));String line = "";while ((line = reader.readLine()) != null){content.append(line);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (reader != null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}}return content.toString();}@Overridepublic void onBackPressed() {if(!mBackKeyPressed){Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();mBackKeyPressed = true;new Timer().schedule(new TimerTask() {//延时两秒,如果超出则擦错第一次按键记录@Overridepublic void run() {mBackKeyPressed = false;}}, 2000);}else{//退出程序this.finish();System.exit(0);}}}

好啦,前面的坑填完了,后面将会继续优化,欢迎批评指正!

Android使用高德与和风天气实现定位实况数据显示 简易新闻(十)相关推荐

  1. Android使用ButterKnife与和风天气sdk

    Android使用ButterKnife与和风天气sdk获取实况天气数据(二) 关于 效果 ButterKnife引用 第一步,修改activity_main.xml 修改MainActicity.j ...

  2. Android使用高德地图api实现基础定位

    Android使用高德地图api实现基础定位(一) 关于 会获取SHA1的可自行跳过这一步 第二步引用高德sdk 第三步修改MainActivity.java 关于 这篇主要讲如何使用高德sdk(不是 ...

  3. android studio高德地图的显示于定位(附带逆地理编码围栏)

    首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息 网站:http://lbs.amap.com/api/android-sdk/guide/create-p ...

  4. android 计入高德地图——实时天气和天气预报

    看下实现出来的效果: 必要条件 1.高德地图搜索功能的jar包 2.导入android studio 3.开始接入项目 (重点接入的详细步骤) 天气查询的2个请求参数类为WEATHER_TYPE_LI ...

  5. android定位周边,Android 使用高德SDK编写周边搜索定位

    转载请注明! 前言 使用高德SDK实现定位及周边的搜索界面,先看效果图: 使用到了高德以下sdk: com.amap.api:3dmap:latest.integration com.amap.api ...

  6. Android 解决高德地图签名后无法定位的问题

    前一段时间,我做了一个关于地图的应用,调试的时候一切正常,签名后就无法正常定位.刚开始以为是6.0动态权限问题改变的原因,应用的调试版本和签名后的版本SHA1值是不同的,而在平台上只用了调试版本的SH ...

  7. Android使用高德和风天气Sdk获取定位实况天气数据(二)

    Android使用高德和风天气Sdk获取定位实况天气数据(二) 先看一下效果 关于 实现 第一步,引用高德api与和风天气 第二步,修改AndroidManifest.xml 第三步,修改activi ...

  8. Android和风天气sdk

    Android使用和风天气Sdk获取实况天气数据(一) 说明(遇到的坑) 效果图 实现过程 第一步,注册账号(2018年以后的开发者,如果是以前的想知道如何获取实况天气也可以私我) 第二步 添加引用 ...

  9. Android使用和风天气接口获取天气数据在APP中展示天气

    公司APP项目需要能能够显示当前天气,网上找了很多天气数据接口,总结下来要么收费,要么用起来不友好,最后还是用了郭霖推荐的和风天气接口 这里记录一下自己的使用过程 首先注册和风天气个人开发者,认证时间 ...

最新文章

  1. (转)彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter
  2. 【PC工具】chrome插件:n多好用实用chrome插件
  3. 初识BGP外部网关协议(一)
  4. python生成wifi字典_用Python自带的itertools生成穷举字典
  5. mysql sin度数正玄值_正弦值角度对照表
  6. HTML5快速设计网页
  7. 安卓逆向及JavaScript实战
  8. Java 一个简单的接口使用案例
  9. 用js计时器写倒计时
  10. 一幅长文细学华为MRS大数据开发(一)——大数据时代的挑战和机遇
  11. springboot中的各个模块及其功能
  12. 使用激光雷达创建地图
  13. CSDN什么时候倒闭啊
  14. 100部好看的校园喜剧片(可练习英文)+美国校园青春励志电影+25部口语练习电影+20部最浪漫电影
  15. Linux配置多网口IP地址,linux配置ip 多个网口
  16. Python爬虫快速了解网页中javascript语言
  17. RK3128-android7.1-nt68661
  18. 恒大健康5亿收购电动汽车驱动系统研发商e-Traction
  19. 过拟合解决方案 —— early stopping
  20. LaTeX/PDF转Word最佳实践总结

热门文章

  1. Java中级面试常见题目+答案
  2. 三大数据模型:星型模型、雪花模型、星座模型
  3. Linux服务器Android环境配置,基于BusyBox+LinuxDeploy+JuiceSSH搭建Android上的Linux服务器教程...
  4. 联合体(共用体) union 的深入理解
  5. 文档宝贝_RC4加密记事软件
  6. 硬盘基本知识(磁头、磁道、扇区、柱面),格式化容量计算
  7. JavaScript换行符的使用
  8. JavaScript实现连接打印机打印的功能
  9. 全网最细Properties详解(自封的)
  10. Error selecting key or setting result to parameter object.