android fragment返回事件处理

我fragmentactivity继承了(add)一个fragment1,fragment1通过add跳到fragment2,然后fragmentactivity获取不到fragment2,只能获取fragment1,所以我用在fragmentactivity中写onKeyDown方法,然后再fragment2里自定义onKeyDown是不行的,根部获取不到,求大神们还有别的方法么?我用add是为了防止跳转是再次加载问题!

2个回答

描述的是fragment和fragmentActivity通信的问题吗?如果是的话,用接口回调的方式

qq_17299423
萌萌哒的程序员 嗯,用你的方法解决了问题
大约 4 年之前 回复

你给每个fragment加一个tag,然后根据tag找一下试试

qq_17299423
萌萌哒的程序员 我是fragmentactivity获取不到继承他的fragment
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
fragment中的点击事件击穿问题
我用Viewpager+Fragment写了一个可以左右侧滑的demo,里面有3个 Fragment(比如编号0、1、2),0fragment中有一个listview,点击listview 中的某些地方,会点击到1fragment中的按钮上的事件,看的网上有说给fragment的根节点设置android:clickable="true",或者重写view的setOnTouchListener返回true,就可以解决击穿问题,但是我试过之后还是可以击穿的,请大神帮忙看下还有什么处理方法呢?
最后一个fragment出现时处理返回键的问题
基于用户的交互,我将Fragments动态的添加到activity中 。当按下返回键, Fragment片段会出现。然而当我按下第一个加载到堆栈中的Fragment中的返回键时,Activity会显示了一个空的布局。我想让这个Activity调用finish()方法然后消失。我试着使用以下代码: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode, event); if(keyCode == KeyEvent.KEYCODE_BACK){ if(getFragmentManager().getBackStackEntryCount()==0){ finish(); return true; } } return true; } 但是这样的话会影响返回键的功能。请求大家给与指点,谢谢!
android studio中关于v4包的问题?
**这是错误提示:** 错误: 对于add(int,ChatFragment), 找不到合适的方法 方法 FragmentTransaction.add(Fragment,String)不适用 (参数不匹配; int无法转换为Fragment) 方法 FragmentTransaction.add(int,Fragment)不适用 (参数不匹配; ChatFragment无法转换为Fragment) ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089418_48233.png) **代码图片** ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089670_644370.png) ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089596_474211.png) ![图片说明](https://img-ask.csdn.net/upload/202002/19/1582089602_315981.png) ** 下面是代码** ``` package com.uitest.administrator.shoulderby.activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.uitest.administrator.shoulderby.R; import com.uitest.administrator.shoulderby.fragment.HomeFragment; import com.uitest.administrator.shoulderby.fragment.JobFragment; import com.uitest.administrator.shoulderby.fragment.MeFragment; import com.uitest.administrator.shoulderby.fragment.ChatFragment; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; /* 主界面 */ public class MainActivity extends FragmentActivity { @Bind(R.id.fl_main_content) FrameLayout flMainContent; @Bind(R.id.iv_main_home) ImageView ivMainHome; @Bind(R.id.tv_main_home) TextView tvMainHome; @Bind(R.id.ll_main_home) LinearLayout llMainHome; @Bind(R.id.iv_main_job) ImageView ivMainJob; @Bind(R.id.tv_main_job) TextView tvMainJob; @Bind(R.id.ll_main_job) LinearLayout llMainJob; @Bind(R.id.iv_main_me) ImageView ivMainMe; @Bind(R.id.tv_main_me) TextView tvMainMe; @Bind(R.id.ll_main_me) LinearLayout llMainMe; @Bind(R.id.iv_main_chat) ImageView ivMainChat; @Bind(R.id.tv_main_chat) TextView tvMainChat; @Bind(R.id.ll_main_chat) LinearLayout llMainChat; private FragmentManager fragmentManager; private HomeFragment homeFragment; private MeFragment meFragment; private ChatFragment chatFragment; private JobFragment jobFragment; private FragmentTransaction transaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //初始化HOME界面,默认进入软件是HOME界面 fragmentManager=getSupportFragmentManager(); transaction = fragmentManager.beginTransaction(); homeFragment = new HomeFragment(); transaction.add(R.id.fl_main_content, homeFragment); transaction.commit(); } //设置点击监听事件 @OnClick({R.id.ll_main_home, R.id.ll_main_me,R.id.ll_main_chat, R.id.ll_main_job}) public void changeTab(View v) { transaction = fragmentManager.beginTransaction(); //设置隐藏Fragment/图片/颜色 hideFragment(); switch (v.getId()) { case R.id.ll_main_home: if (homeFragment == null) { homeFragment = new HomeFragment(); transaction.add(R.id.fl_main_content, homeFragment); } transaction.show(homeFragment); ivMainHome.setImageResource(R.drawable.bottom02); tvMainHome.setTextColor(getResources().getColor(R.color.home_back_selected)); break; case R.id.ll_main_job: if (jobFragment == null) { //当jobFragment不存在时,进行初始化 jobFragment = new JobFragment(); transaction.add(R.id.fl_main_content, jobFragment); //添加jobFragment } transaction.show(jobFragment); //显示jobFragment ivMainJob.setImageResource(R.drawable.bottom08); tvMainJob.setTextColor(getResources().getColor(R.color.home_back_selected)); break; case R.id.ll_main_chat: if (chatFragment == null) { chatFragment = new ChatFragment(); transaction.add(R.id.fl_main_content, chatFragment); } transaction.show(chatFragment); ivMainChat.setImageResource(R.drawable.bottom04); tvMainChat.setTextColor(getResources().getColor(R.color.home_back_selected)); break; case R.id.ll_main_me: if (meFragment == null) { meFragment = new MeFragment(); transaction.add(R.id.fl_main_content, meFragment); } transaction.show(meFragment); ivMainMe.setImageResource(R.drawable.bottom06); tvMainMe.setTextColor(getResources().getColor(R.color.home_back_selected)); break; } transaction.commit(); } //设置隐藏Fragment/图片/颜色 private void hideFragment() { if (homeFragment != null) { ivMainHome.setImageResource(R.drawable.bottom01); tvMainHome.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(homeFragment); } if (jobFragment != null) { ivMainJob.setImageResource(R.drawable.bottom07); tvMainJob.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(jobFragment); } if (chatFragment != null) { ivMainChat.setImageResource(R.drawable.bottom03); tvMainChat.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(chatFragment); } if (meFragment != null) { ivMainMe.setImageResource(R.drawable.bottom05); tvMainMe.setTextColor(getResources().getColor(R.color.home_back_unselected)); transaction.hide(meFragment); } } private boolean flag = true; //flag 用于判断是否是第一次点击返回键 private static final int WHAT_RESET_BACK = 1; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case WHAT_RESET_BACK: flag = true; break; } } }; //重写onKeyDown,当点击两次返回键退出程序 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && flag) { Toast.makeText(this, "再点击一次,退出当前应用", Toast.LENGTH_SHORT).show(); flag = false; handler.sendEmptyMessageDelayed(WHAT_RESET_BACK, 2000); //设置2s的延迟,用于处理flag的值 return true; } return super.onKeyDown(keyCode, event); } //为了避免内存泄漏,应该在Destroy()移除未被执行的消息 @Override protected void onDestroy() { super.onDestroy(); handler.removeCallbacksAndMessages(null); } } ```
如何关闭当前activity
返回键回到上一个浏览页面。于是我重写了返回键,但是fragment里面并没有onKeyDown方法,于是我在fragment里面写了一个静态方法,并在activity的onKeyDown方法中调用它,这样就能把点击事件传到fragment中来处理。如下: activity中的onKeyDown方法: ``` public boolean onKeyDown(int keyCode, KeyEvent event) { if(currentIndex==1){ //当前显示WebFragment WebFragment.clickBack(keyCode, event); return true; } return super.onKeyDown(keyCode, event); } ``` 这是WebFragment中的clickBack方法 ``` public static boolean clickBack(int keycode,KeyEvent event){ if(keycode==KeyEvent.KEYCODE_BACK&&webView.canGoBack()){//页面能返回 webView.goBack(); }else if(keycode==KeyEvent.KEYCODE_BACK&&!webView.canGoBack()){//不能返回 } return true; } ``` 但是呢,我希望WebFragment中 页面不能返回的时候能退出当前activity。但是clickBack是一个静态方法,并不能调用getActivity.finish()。 。。请问有什么好的方法能解决这个问题吗?我只是希望WebFragment中的webView页面能返回时,点击返回键返回上一个页面;当webView页面不能返回时,点击返回键退出当前activity。。求解~~
如何解决ViewPager+Fragment+GridView实现无限滑动时页面切换的卡顿问题?
最近想自己写一个日历组件,思路是使用ViewPager+Fragment+GridView,如图 (https://img-ask.csdn.net/upload/201902/27/1551263494_687583.png) 最外层是一个DialogFragment 如果正常滑动,没有任何问题,但在快速滑动的时候,在滑到Fragment1和4时进行setCurrentItem时,会发生卡顿现象,即没有即时跳转导致已达到边界无法继续滑动的情况 慢滑 (https://img-ask.csdn.net/upload/201902/27/1551269528_523451.gif) 快滑 (https://img-ask.csdn.net/upload/201902/27/1551269556_845553.gif) 我自己尝试过的解决办法: 1. 一开始我以为是Fragment中布局过于复杂,导致在刷新数据时卡顿,但即时我去掉Fragment中的所有布局,仍会发生卡顿现象 2.后来我将问题定位在ViewPager的事件分发上,将ViewPager的自定义,将onInterceptTouchEvent方法复写直接返回true,现象消失,滑动无问题,但由于GridView中需要响应点击事件,所以我又做了事件拦截的判断,但无论怎么判断,只要不直接返回true,该现象就会发生 下面贴上我的部分代码: 1. 我在DialogFragment中为ViewPager绑定监听事件,在onPageScrollStateChanged中判断页面是否跳转,在页面滑到最左最右时进行跳转 ``` //滑动状态监听 override fun onPageScrollStateChanged(p0: Int) { //1时表示正在滑动、2时表示滑动完毕、0时什么都没做,滑动时变化顺序为1>2>0 //在0时设置页面位置互换 if (p0 == 0){ position = calViewPager.currentItem when (position) { 0 -> { //到达最左侧Fragment时,刷新倒数第二个Fragment的数据与其保持一致,然后跳转,刷新部分代码省略 calViewPager.setCurrentItem(2, false) //跳转完成后刷新其余页面,代码省略 } 3 -> { //到达最右侧Fragment时,刷新第二个Fragment的数据与其保持一致,然后跳转,刷新部分代码省略 calViewPager.setCurrentItem(1, false) //跳转完成后刷新其余页面,代码省略 } 2 -> { //数据刷新,代码省略 } 1 -> { //数据刷新,代码省略 } } } } ``` 2.自定义了ViewPager,进行了事件拦截处理 ``` private var xPosition:Float? = null // 滑动点击判断、拦截 override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { val res = super.onInterceptTouchEvent(ev) xPosition = if (ev!!.action == MotionEvent.ACTION_DOWN){ ev.x }else{ if (Math.abs(ev.x - xPosition!!) > 0){ return true }else{ ev.x } } return res } ``` 3.ViewPager的Adapter ``` class MyCalendarViewPagerAdapter(fm: FragmentManager, private var fragmentsList:MutableList<Fragment>): FragmentPagerAdapter(fm){ //Fragment个数 override fun getCount(): Int { return fragmentsList.size } override fun getItem(p0: Int): Fragment { return fragmentsList[p0] } //不销毁Item override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { } override fun getItemPosition(`object`: Any): Int { return PagerAdapter.POSITION_NONE } } ``` 4.在Fragment中是使用回调进行的数据更新,代码就不上了 这个问题已经困扰我两周了 求大佬指点
正在学习android的第一行代码的coolweather遇到了点问题
ChooseAreaFragment代码 import android.app.ProgressDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.widget.ButtonBarLayout; import androidx.fragment.app.Fragment; import com.example.coolweather.db.City; import com.example.coolweather.db.County; import com.example.coolweather.db.Province; import com.example.coolweather.util.HttpUtil; import com.example.coolweather.util.Utility; import org.litepal.crud.DataSupport; import java.io.IOException; import java.util.ArrayList; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class ChooseAreaFrament extends Fragment { public static final int LEVEL_PROVINCE = 0; public static final int LEVEL_CITY=1; public static final int LEVEL_COUNTY = 2; private ProgressDialog progressDialog; private TextView titleText; private Button backButton; private ListView listView; private ArrayAdapter<String> adapter; private List<String> dataList = new ArrayList<>(); /** * 省列表 */ private List<Province> provinceList; /** * 市列表 */ private List<City> cityList; /** * 县列表 */ private List<County>countyList; /** * 选中的省份 */ private Province selectedProvince; /** * 选中的城市 */ private City selectedCity; /** * 当前选中的级别 */ private int currentLevel; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.choose_area,container,false); titleText = (TextView) view.findViewById(R.id.title_text); backButton = (Button) view.findViewById(R.id.back_button); listView = (ListView)view.findViewById(R.id.list_view); adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1,dataList); listView.setAdapter(adapter); return view; } @Override public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(currentLevel == LEVEL_PROVINCE){ selectedProvince = provinceList.get(position); queryCities(); } else if (currentLevel == LEVEL_CITY) { selectedCity = cityList.get(position); queryCounties(); } } }); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (currentLevel == LEVEL_COUNTY) { queryCities(); } else if (currentLevel == LEVEL_CITY){ queryProvinces(); } } }); queryProvinces(); } /** * 查询全国所有的省,优先数据库查询,如果没有查询到再去服务器上查询 */ private void queryProvinces(){ titleText.setText("中国"); backButton.setVisibility(View.GONE); provinceList = DataSupport.findAll(Province.class); if (provinceList.size() > 0){ dataList.clear(); for (Province province : provinceList){ dataList.add(province.getProvinceName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel = LEVEL_PROVINCE; } else { String address = "http://guolin.tech/api/china"; queryFromServer(address,"province"); } } /** * 查询全国所有的城市,优先数据库查询,如果没有查询到再去服务器上查询 */ private void queryCities(){ titleText.setText(selectedProvince.getProvinceName()); backButton.setVisibility(View.VISIBLE); cityList = DataSupport.where("provinceid = ?",String.valueOf(selectedProvince. getId())).find(City.class); if(cityList.size() > 0){ dataList.clear(); for(City city : cityList){ dataList.add(city.getCityName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel = LEVEL_CITY; }else{ int provinceCode = selectedProvince.getProvinceCode(); String address = "http://guolin.tech/api/china/" + provinceCode; queryFromServer(address,"city"); } } /** * 查询全国所有的县,优先数据库查询,如果没有查询到再去服务器上查询 */ private void queryCounties(){ titleText.setText(selectedCity.getCityName()); backButton.setVisibility(View.VISIBLE); countyList = DataSupport.where("cityid = ?",String.valueOf(selectedCity. getId())).find(County.class); if(countyList.size() > 0 ){ dataList.clear(); for(County county : countyList){ dataList.add(county.getCountyName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel = LEVEL_COUNTY; }else{ int provinceCode = selectedProvince.getProvinceCode(); int cityCode = selectedCity.getCityCode(); String address = "http://guolin.tech/api/china/" + provinceCode + "/" + cityCode; queryFromServer(address,"county"); } } /** * 根据传入的地址和类型从服务器上查询省市县数据 */ private void queryFromServer(String address,final String type){ showProgressDialog(); HttpUtil.sendOkHttpRequest(address, new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { String responseText = response.body().string(); boolean result = false; if("province".equals(type)){ result = Utility.handleProvinceResponse(responseText); } else if ("city".equals(type)){ result = Utility.handleCityResponse(responseText,selectedProvince.getId()); } else if ("county".equals(type)){ result = Utility.handleCountyResponse(responseText,selectedCity.getId()); } if (result){ getActivity().runOnUiThread(new Runnable() { @Override public void run() { closeProgressDialog(); if ("province".equals(type)){ queryProvinces(); } else if ("city".equals(type)){ queryCities(); } else if ("county".equals(type)) queryCounties(); } }); } } @Override public void onFailure(Call call, IOException e) { //通过runOnUiTread()方法回到主线程处理逻辑 getActivity().runOnUiThread(new Runnable() { @Override public void run() { closeProgressDialog(); Toast.makeText(getContext(),"加载失败",Toast.LENGTH_SHORT).show(); } }); } }); } /** * 显示进度对话框 */ private void showProgressDialog(){ if (progressDialog == null){ progressDialog = new ProgressDialog(getActivity()); progressDialog.setMessage("正在加载..."); progressDialog.setCanceledOnTouchOutside(false); } progressDialog.show(); } /** * 关闭进度对话框 */ private void closeProgressDialog(){ if (progressDialog != null){ progressDialog.dismiss(); } } Utility代码 import android.text.TextUtils; import com.example.coolweather.db.City; import com.example.coolweather.db.County; import com.example.coolweather.db.Province; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class Utility { /** * 解析和处理服务器返回的省级数据 */ public static boolean handleProvinceResponse(String response){ if (!TextUtils.isEmpty(response)){ try { JSONArray allProvinces = new JSONArray(response); for (int i = 0;i<allProvinces.length();i++){ JSONObject provinceObject = allProvinces.getJSONObject(i); Province province = new Province(); province.setProvinceName(provinceObject.getString("name")); province.setProvinceCode(provinceObject.getInt("id")); province.save(); } return true; } catch (JSONException e) { e.printStackTrace(); } } return false; } /** * 解析服务器和处理器返回的市级数据 */ public static boolean handleCityResponse(String response,int provinceId){ if(!TextUtils.isEmpty(response)){ try { JSONArray allCities = new JSONArray(response); for(int i=0;i<allCities.length();i++){ JSONObject cityObject = allCities.getJSONObject(i); City city = new City(); city.setCityName(cityObject.getString("name")); city.setCityCode(cityObject.getInt("id")); city.setProvinceId(provinceId); city.save(); } return true; } catch (JSONException e) { e.printStackTrace(); } } return false; } public static boolean handleCountyResponse(String response, int cityId){ if(TextUtils.isEmpty(response)){ try { JSONArray allCounties = new JSONArray(response); for(int i=0;i<allCounties.length();i++){ JSONObject countyObject = allCounties.getJSONObject(i); County county = new County(); county.setCountyName(countyObject.getString("name")); county.setWeatherId(countyObject.getString("weather_id")); county.setCityId(cityId); county.save(); } return true; } catch (JSONException e) { e.printStackTrace(); } } return false; } 复制代码 } HttpUtil代码 import okhttp3.OkHttpClient; import okhttp3.Request; public class HttpUtil { public static void sendOkHttpRequest(String address,okhttp3.Callback callback) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(address).build(); client.newCall(request).enqueue(callback); } 复制代码 } app apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.example.coolweather" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'org.litepal.android:core:1.4.1' implementation 'com.squareup.okhttp3:okhttp:3.4.1' implementation 'com.google.code.gson:gson:2.7' implementation 'com.github.bumptech.glide:glide:3.7.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' } debug到这里就动不了![图片说明](https://img-ask.csdn.net/upload/201908/14/1565753464_912183.png)
百度地图 onReceiveLocation 回调
package cn.LCSys.fragment; import java.util.ArrayList; import java.util.Calendar; 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.BaiduMapOptions; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; 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.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.SupportMapFragment; import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode; import com.baidu.mapapi.model.LatLng; import android.content.BroadcastReceiver; import cn.LCSys.R; import cn.LCSys.dataParse.AgentN; import cn.LCSys.dataParse.PollContent; import cn.LCSys.fragment.FragmentRealData.RealDataAdapter; import cn.LCSys.fragment.FragmentRealData.RealtimeData; import cn.LCSys.socket.Const; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; import android.widget.RadioButton; import android.widget.Toast; /** * 数据地图展示 * @ClassName: FragmentRealWifiMap * @author xtz * @version 1.0 * */ public class FragmentRealWifiMap extends Fragment { String TAG = "FragmentRealWifMap"; private BroadcastReceiver DataReceiver = null; View Curview; private MapView mMapView; BaiduMap mBaiduMap; public static Context s_context; private LocationMode mCurrentMode; LocationClient mLocClient; BitmapDescriptor mCurrentMarker; boolean isFirstLoc = true;// 是否首次定位 RadioButton Rbnormalmode;//普通图模式 RadioButton Rbstatellitemode;//卫星图模式 public MyLocationListenner myListener = new MyLocationListenner(); @SuppressWarnings("unused") private static final String LTAG = FragmentRealWifiMap.class.getSimpleName(); SupportMapFragment map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //这个初始化很重要 SDKInitializer.initialize(getActivity().getApplicationContext()); Curview = inflater.inflate(R.layout.fragment_realinfo_wifimap, null); mMapView = (MapView) Curview.findViewById(R.id.realwifi_map); mBaiduMap = mMapView.getMap(); s_context = getActivity(); SetMarkPic();//设置位置图标 AddCompress();//添加同步图标 SetLocMode();//设置当前位置 initView(); return Curview ; } // void initView() { Rbnormalmode = (RadioButton)Curview.findViewById(R.id.normalmap); Rbstatellitemode = (RadioButton)Curview.findViewById(R.id.statellitemap); Rbnormalmode.setOnClickListener(new OnClickListener() { public void onClick(View v) { boolean checked = ((RadioButton) v).isChecked(); if(checked) { //普通图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); mLocClient.requestLocation(); } } }); Rbstatellitemode.setOnClickListener(new OnClickListener() { public void onClick(View v) { boolean checked = ((RadioButton) v).isChecked(); if(checked) {//卫星图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); mLocClient.requestLocation(); } } }); } //设置跟踪位置mark图标 private void SetMarkPic() { mCurrentMarker = BitmapDescriptorFactory .fromResource(R.drawable.icon_loc_go); } //设置位置模式 private void AddCompress() { mCurrentMode = LocationMode.FOLLOWING;//罗盘模式 mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker)); } //设置系统地图的位置模式,我们设置为跟随模式,即中心点在当前位置 private void SetLocMode() { mCurrentMode = LocationMode.FOLLOWING; mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker)); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); // 定位初始化 mLocClient = new LocationClient(getActivity()); mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);// 打开gps option.setAddrType("all");//返回的定位结果包含地址信息 option.setCoorType("bd09ll"); // 设置坐标类型返回的定位结果是百度经纬度 option.setScanSpan(1000); option.disableCache(true);//禁止启用缓存定位 mLocClient.setLocOption(option); mLocClient.start(); if(mLocClient.isStarted()) { int rt = mLocClient.requestLocation(); } } /** * 定位SDK监听函数 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // map view 销毁后不在处理新接收的位置 if (location == null || mMapView == null) { return; } Log.i(TAG,"now in MyLocationListenner"); MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(u); } if(location.getLocType() == BDLocation.TypeOffLineLocation ) { Log.e(TAG,"Now is 离线定位!"); } if(location.getLocType() == BDLocation.TypeOffLineLocationFail) { Log.e(TAG,"离线定位失败!"); } //|| BDLocation.TypeOfflineLocationFail) } public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null){ return ; } StringBuffer sb = new StringBuffer(256); if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation) { sb.append("\naddr : "); sb.append(poiLocation.getAddrStr()); } } } @Override public void onStart() { super.onStart(); } @Override public void onResume() { super.onResume(); mMapView.onResume(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public void onPause() { super.onPause(); mMapView.onPause(); } @Override public void onStop() { super.onStop(); } @Override public void onDestroy() { // 退出时销毁定位 mLocClient.stop(); // 关闭定位图层 mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } }
gps定位requestLocationUpdates第四个参数写什么?
我是新手 自学 改代码按照视频里写的 视频里代码没问题 到我这就有问题:locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); 这里的this 有问题 换成什么参数都有问题 写成this 的话 整行代码都有红线! 请大神帮忙! ``` package fragment; import android.content.Context; import android.content.Intent; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; ; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.luao2.jiemianzhuantiao.R; import com.lidroid.xutils.ViewUtils; import org.xutils.view.annotation.ViewInject; import java.io.IOException; import java.util.List; import luao2.utils.SharedUtils; /** * Created by Administrator on 2017/4/4. */ public class FragmentHome extends Fragment implements LocationListener{ @ViewInject(R.id.index_top_city) private TextView topCity; private String cityName; //当前城市名称 private LocationManager locationManager; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.home_index, null); ViewUtils.inject(this,view); //获取数据并显示 return view; } @Override public void onStart() { super.onStart(); //检查当前的GPS模块 checkGPSIsOpen(); } private void checkGPSIsOpen(){ //获取当前的LocationManager对象 locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!isOpen){ //进入GPS的设置页面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent,0); } //开始定位 startLocation(); } //使用GPS定位的方法 private void startLocation(){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); } //接收并且处理消息 private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what == 1){ topCity.setText(cityName); } return false; } }); //获取对应位置的经纬度并且定位城市 private void updateWithNewLocation(Location location){ double lat = 0.0,lng = 0.0; if (location !=null){ lat = location.getLatitude(); lng = location.getLongitude(); Log.i("TAG","经度是"+lat+"纬度是:"+lng); }else { cityName = "无法获取城市信息"; } //通过经纬度获取地址,由于地址会有多个,这个和经纬度精确度有关,本实例中定义了最大的返回数2,即在集合对象中有两个值 List<Address> list = null; Geocoder ge = new Geocoder(getActivity()); try { list = ge.getFromLocation(lat,lng,2); } catch (IOException e) { e.printStackTrace(); } if (list !=null && list.size()>0){ for (int i = 0; i < list.size(); i++){ Address ad = list.get(i); cityName = ad.getLocality();//获取城市 } } //发送一条空消息 handler.sendEmptyMessage(1); } //位置信息更改执行方法 @Override public void onLocationChanged(Location location) { //更新当前的位置信息 updateWithNewLocation(location); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onDestroy() { super.onDestroy(); //保存城市 //停止定位 stopLocation(); } //停止定位 private void stopLocation(){ locationManager.removeUpdates(this); } } ```
GPS定位:locationManager.requestLocationUpdates()报错
我是新手 自学 改代码按照视频里写的 视频里代码没问题 到我这就有问题:locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); 整行代码都有红线! 本页代码跟视频里一模一样http://v.youku.com/v_show/id_XMTYyMDIwNTgzNg==.html?f=27510286&o=0&firsttime=187&spm=a2hfx.8251854.recordContent.DL~DD~5~5!11~5~A 请大神帮忙看看视频! ``` package fragment; import android.content.Context; import android.content.Intent; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; ; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.luao2.jiemianzhuantiao.R; import com.lidroid.xutils.ViewUtils; import org.xutils.view.annotation.ViewInject; import java.io.IOException; import java.util.List; import luao2.utils.SharedUtils; /** * Created by Administrator on 2017/4/4. */ public class FragmentHome extends Fragment implements LocationListener{ @ViewInject(R.id.index_top_city) private TextView topCity; private String cityName; //当前城市名称 private LocationManager locationManager; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.home_index, null); ViewUtils.inject(this,view); //获取数据并显示 return view; } @Override public void onStart() { super.onStart(); //检查当前的GPS模块 checkGPSIsOpen(); } private void checkGPSIsOpen(){ //获取当前的LocationManager对象 locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!isOpen){ //进入GPS的设置页面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent,0); } //开始定位 startLocation(); } //使用GPS定位的方法 private void startLocation(){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); } //接收并且处理消息 private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what == 1){ topCity.setText(cityName); } return false; } }); //获取对应位置的经纬度并且定位城市 private void updateWithNewLocation(Location location){ double lat = 0.0,lng = 0.0; if (location !=null){ lat = location.getLatitude(); lng = location.getLongitude(); Log.i("TAG","经度是"+lat+"纬度是:"+lng); }else { cityName = "无法获取城市信息"; } //通过经纬度获取地址,由于地址会有多个,这个和经纬度精确度有关,本实例中定义了最大的返回数2,即在集合对象中有两个值 List<Address> list = null; Geocoder ge = new Geocoder(getActivity()); try { list = ge.getFromLocation(lat,lng,2); } catch (IOException e) { e.printStackTrace(); } if (list !=null && list.size()>0){ for (int i = 0; i < list.size(); i++){ Address ad = list.get(i); cityName = ad.getLocality();//获取城市 } } //发送一条空消息 handler.sendEmptyMessage(1); } //位置信息更改执行方法 @Override public void onLocationChanged(Location location) { //更新当前的位置信息 updateWithNewLocation(location); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onDestroy() { super.onDestroy(); //保存城市 //停止定位 stopLocation(); } //停止定位 private void stopLocation(){ locationManager.removeUpdates(this); } } ```
新手悬赏 400c币 requestLocationUpdates()报错
![图片说明](https://img-ask.csdn.net/upload/201704/07/1491539879_385760.png) 我是新手 自学 改代码按照视频里写的 视频里代码没问题 到我这就有问题:locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); 整行代码都有红线! 本页代码跟视频里一模一样http://v.youku.com/v_show/id_XMTYyMDIwNTgzNg==.html?f=27510286&o=0&firsttime=187&spm=a2hfx.8251854.recordContent.DL~DD~5~5!11~5~A 实在没辙了,请高手看看视频,悬赏! ``` package fragment; import android.content.Context; import android.content.Intent; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; ; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.luao2.jiemianzhuantiao.R; import com.lidroid.xutils.ViewUtils; import org.xutils.view.annotation.ViewInject; import java.io.IOException; import java.util.List; import luao2.utils.SharedUtils; /** * Created by Administrator on 2017/4/4. */ public class FragmentHome extends Fragment implements LocationListener{ @ViewInject(R.id.index_top_city) private TextView topCity; private String cityName; //当前城市名称 private LocationManager locationManager; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.home_index, null); ViewUtils.inject(this,view); //获取数据并显示 return view; } @Override public void onStart() { super.onStart(); //检查当前的GPS模块 checkGPSIsOpen(); } private void checkGPSIsOpen(){ //获取当前的LocationManager对象 locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!isOpen){ //进入GPS的设置页面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent,0); } //开始定位 startLocation(); } //使用GPS定位的方法 private void startLocation(){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); } //接收并且处理消息 private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what == 1){ topCity.setText(cityName); } return false; } }); //获取对应位置的经纬度并且定位城市 private void updateWithNewLocation(Location location){ double lat = 0.0,lng = 0.0; if (location !=null){ lat = location.getLatitude(); lng = location.getLongitude(); Log.i("TAG","经度是"+lat+"纬度是:"+lng); }else { cityName = "无法获取城市信息"; } //通过经纬度获取地址,由于地址会有多个,这个和经纬度精确度有关,本实例中定义了最大的返回数2,即在集合对象中有两个值 List<Address> list = null; Geocoder ge = new Geocoder(getActivity()); try { list = ge.getFromLocation(lat,lng,2); } catch (IOException e) { e.printStackTrace(); } if (list !=null && list.size()>0){ for (int i = 0; i < list.size(); i++){ Address ad = list.get(i); cityName = ad.getLocality();//获取城市 } } //发送一条空消息 handler.sendEmptyMessage(1); } //位置信息更改执行方法 @Override public void onLocationChanged(Location location) { //更新当前的位置信息 updateWithNewLocation(location); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onDestroy() { super.onDestroy(); //保存城市 //停止定位 stopLocation(); } //停止定位 private void stopLocation(){ locationManager.removeUpdates(this); } } ```
dps定位requestLocationUpdates第四个参数些什么?
我是新手 自学 改代码按照视频里写的 视频里代码没问题 到我这就有问题:locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); 这里的this 有问题 换成什么参数都有问题 写成this 的话 整行代码都有红线! 请大神帮忙! ``` package fragment; import android.content.Context; import android.content.Intent; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; ; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.luao2.jiemianzhuantiao.R; import com.lidroid.xutils.ViewUtils; import org.xutils.view.annotation.ViewInject; import java.io.IOException; import java.util.List; import luao2.utils.SharedUtils; /** * Created by Administrator on 2017/4/4. */ public class FragmentHome extends Fragment implements LocationListener{ @ViewInject(R.id.index_top_city) private TextView topCity; private String cityName; //当前城市名称 private LocationManager locationManager; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.home_index, null); ViewUtils.inject(this,view); //获取数据并显示 return view; } @Override public void onStart() { super.onStart(); //检查当前的GPS模块 checkGPSIsOpen(); } private void checkGPSIsOpen(){ //获取当前的LocationManager对象 locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); boolean isOpen = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!isOpen){ //进入GPS的设置页面 Intent intent = new Intent(); intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent,0); } //开始定位 startLocation(); } //使用GPS定位的方法 private void startLocation(){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,100,this); } //接收并且处理消息 private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what == 1){ topCity.setText(cityName); } return false; } }); //获取对应位置的经纬度并且定位城市 private void updateWithNewLocation(Location location){ double lat = 0.0,lng = 0.0; if (location !=null){ lat = location.getLatitude(); lng = location.getLongitude(); Log.i("TAG","经度是"+lat+"纬度是:"+lng); }else { cityName = "无法获取城市信息"; } //通过经纬度获取地址,由于地址会有多个,这个和经纬度精确度有关,本实例中定义了最大的返回数2,即在集合对象中有两个值 List<Address> list = null; Geocoder ge = new Geocoder(getActivity()); try { list = ge.getFromLocation(lat,lng,2); } catch (IOException e) { e.printStackTrace(); } if (list !=null && list.size()>0){ for (int i = 0; i < list.size(); i++){ Address ad = list.get(i); cityName = ad.getLocality();//获取城市 } } //发送一条空消息 handler.sendEmptyMessage(1); } //位置信息更改执行方法 @Override public void onLocationChanged(Location location) { //更新当前的位置信息 updateWithNewLocation(location); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onDestroy() { super.onDestroy(); //保存城市 //停止定位 stopLocation(); } //停止定位 private void stopLocation(){ locationManager.removeUpdates(this); } } ```
安卓蓝牙,BluetoothAdapter.getRemoteDevice()报错
``` public class PathFragment extends Fragment { private Button scanBT; public static final int MY_PERMISSION_REQUEST_CONSTANT = 1; public static final int MESSAGE_STATE_CHANGE = 1; public static final int MESSAGE_READ = 2; public static final int MESSAGE_WRITE = 3; public static final int MESSAGE_DEVICE_NAME = 4; public static final int MESSAGE_TOAST = 5; // Key names received from the BluetoothChatService Handler public static final String DEVICE_NAME = "device_name"; public static final String TOAST = "toast"; // Intent请求码 private static final int REQUEST_CONNECT_DEVICE = 1; private static final int REQUEST_ENABLE_BT = 2; private static final int REQUEST_NEW_CARD = 3; private String mConnectedDeviceName = null; private BluetoothAdapter mBluetoothAdapter = null; private BluetoothService mBlueService = null; String recieveStr = "";//暂存当前发过来的字节 int n = 0; MyDatabaseHelper myDatabaseHelper; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View pathLayout = inflater.inflate(R.layout.path_layout, container, false); return pathLayout; } @Override public void onActivityCreated(Bundle savedInstanceState) {//当Activity中的onCreate方法执行完后调用。 super.onActivityCreated(savedInstanceState); //打开数据库 myDatabaseHelper = new MyDatabaseHelper(getActivity(),"csport.db",null,1); initViews(); scanBT.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent serverIntent = new Intent(getActivity(), DeviceListActivity.class); startActivityForResult(serverIntent,REQUEST_CONNECT_DEVICE); } }); } private void initViews() { scanBT = (Button)getActivity().findViewById(R.id.button_scan); } public void onDestroy() { super.onDestroy(); // Stop the Bluetooth chat services if (mBlueService != null) mBlueService.stop(); } @Override public synchronized void onResume() { super.onResume(); // Performing this check in onResume() covers the case in which BT was // not enabled during onStart(), so we were paused to enable it... // onResume() will be called when ACTION_REQUEST_ENABLE activity returns. if (mBlueService != null) { // Only if the state is STATE_NONE, do we know that we haven't started already if (mBlueService.getState() == BluetoothService.STATE_NONE) { // Start the Bluetooth chat services mBlueService.start(); } } } //处理线程返回信息 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_STATE_CHANGE://1 Toast.makeText(getActivity(), "change", Toast.LENGTH_LONG); switch (msg.arg1) { case BluetoothService.STATE_CONNECTED: //mTitle.setText(R.string.title_connected_to); //mTitle.append(mConnectedDeviceName); //mConversationArrayAdapter.clear(); break; case BluetoothService.STATE_CONNECTING: //mTitle.setText(R.string.title_connecting); break; case BluetoothService.STATE_LISTEN: case BluetoothService.STATE_NONE: //mTitle.setText(R.string.title_not_connected); break; } break; //发送了信息,显示在本地屏幕上(重写,显示结果即可) case MESSAGE_WRITE://2 Toast.makeText(getActivity(), "发送成功", Toast.LENGTH_LONG); break; //收到了信息,显示在本地屏幕上(重写,加入到通信录中) case MESSAGE_READ://3读取数据 byte[] readBuf = (byte[]) msg.obj; recieveStr = new String(readBuf, 0, msg.arg1); if (recieveStr.length() > 7) { break; } else { float res = 0; if (recieveStr != null && recieveStr.length() > 0) { res = Float.parseFloat(recieveStr); //arrayList.add(res); //n ++ ; //Log.e("Tag",String.valueOf(arrayList)); //Log.e("Tag",String.valueOf(n)); } if (n == 30) { //analyzer.deal(MainActivity.this,arrayList); //重置n和arrlist准备接收下一个5min的数据 n = 0; //arrayList.clear(); } } //tView.setText(recieveStr); //writeFile(recieveStr); break; case MESSAGE_DEVICE_NAME://4 // save the connected device's name mConnectedDeviceName = msg.getData().getString(DEVICE_NAME); Toast.makeText(getActivity(), "已成功连接到 " + mConnectedDeviceName, Toast.LENGTH_SHORT).show(); //requestSend();//初次连接成功后请求重发 break; case MESSAGE_TOAST://5 Toast.makeText(getActivity(), msg.getData().getString(TOAST), Toast.LENGTH_SHORT).show(); break; } } }; //处理其他Activity的返回结果 public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CONNECT_DEVICE://1 //当点击了设备列表后返回所指向设备的MAC地址,根据此MAC进行主动连接 if (resultCode == Activity.RESULT_OK) { String address = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS); BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); mBlueService.connect(device); } break; case REQUEST_ENABLE_BT://2 //由确认打开蓝牙Activity返回,若打开成功初始化名片列表 if (resultCode == Activity.RESULT_OK) { // Bluetooth is now enabled, so set up a chat session setupCards(); } else { // User did not enable Bluetooth or an error occured Toast.makeText(getActivity(), R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show(); //finish(); } break; case REQUEST_NEW_CARD://3 //由添加新名片Activity返回,若添加了新card重新读取并显示 if (resultCode == Activity.RESULT_OK) { setupCards(); } break; } } private void setupCards() { //完成显示内容后,初始化蓝牙服务对象 mBlueService = new BluetoothService(mHandler); } //重写setMenuVisibility方法,不然会出现叠层的现象 public void setMenuVisibility(boolean menuVisibility) { super.setMenuVisibility(menuVisibility); if (this.getView() != null) { this.getView().setVisibility(menuVisibility ? View.VISIBLE : View.GONE); } } } ``` 当我把周围的设备搜索出来,准备连接的时候,就给我报错如下:Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.bluetooth.BluetoothDevice android.bluetooth.BluetoothAdapter.getRemoteDevice(java.lang.String)' on a null object reference 出错的这段代码为:BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 我通过日志打印发现明明address是有值的啊,可是怎么就出这种错误呢,求各位大神指导一下啊! c币不多,能回答上的我追加财富。
ohhttp请求服务器以后,根据结果,开启一个服务,在其他页面取消这个服务,但对线程有疑惑
我用okhttp请求服务器,在得到结果以后,根据结果内容,开启一个服务,服务是用来进行一个倒计时功能的, 我是在okhttp里的 ``` @Override public void onResponse(Call call, Response response) throws IOException { Looper.prepare(); String str=response.body().string(); /** * 根据服务器返回结果弹出Toast */ if (str.equals("预约成功")){ Toast.makeText(mContext,str,Toast.LENGTH_SHORT).show(); /** * 定时任务,闹钟提醒 */ ShareUtils.putString(mContext.getApplicationContext(),"ROOMNUMBER",POsition); ShareUtils.putString(mContext.getApplicationContext(),"SEATNMBER",number); //*************** Intent intent1=new Intent(mContext, MyService.class); mContext.startService(intent1); //*************** }else { Toast.makeText(mContext,str,Toast.LENGTH_SHORT).show(); } /** * */ Looper.loop(); } ``` 但我感觉这个方法不是在子线程里面运行吗?我在这个里面开启的服务,能关闭吗? 我是想在一个fragment里面,关闭这个服务,但是我关闭服务的代码写在主线程了, 两个不一样的线程开启服务,关闭服务能行吗? ``` handler =new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 9: //关掉预约成功之后计时的服务 Intent stopIntent = new Intent(getActivity(),MyService.class); getActivity().stopService(stopIntent); Toast.makeText(getContext(),"签到成功",Toast.LENGTH_SHORT).show(); //******* SHUJUKU(); //******** //ShareUtils.putBoolean(getContext().getApplicationContext(),"married",true); ShareUtils.putBoolean(getContext().getApplicationContext(),"married",true); SharedPreferences.Editor editor4 = getContext().getSharedPreferences("data", Context.MODE_PRIVATE) .edit(); editor4.putString("STATE", "1"); editor4.apply(); onResume(); break; ``` 我想在这里关闭这个服务,请问我目前这样写能达到我想要的效果吗? 我如果在第一个请求结果里面也用hander处理,在hander里面来开启这个服务会怎样呢?
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
《面试宝典》2019年springmvc面试高频题(java)
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单...
计算机网络的核心概念
这是《计算机网络》系列文章的第二篇文章 我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。 网络核心 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me a few
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试一个ArrayList我都能跟面试官扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
2020年1月中国编程语言排行榜,python是2019增长最快编程语言
编程语言比例 排名 编程语言 最低工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 20713 17500 5042 46250 480 0.14% 2 typescript 18503 22500 6000 30000 1821 0.52% 3 lua 18150 17500 5250 35000 2956 0.84% 4 go 17989 16...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问