首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当TextView在片段内的onLocationChanged中更改时,应用程序崩溃

当TextView在片段内的onLocationChanged中更改时,应用程序崩溃
EN

Stack Overflow用户
提问于 2016-08-21 02:55:44
回答 4查看 286关注 0票数 1

我是一个为Android开发的初学者。我在我的应用程序,我有GPS和导航抽屉工作。我的目标是在片段中显示坐标。我得到了将全球定位系统数据输入logcat的应用程序,现在我正在尝试从onLocationChanged方法中更改TextvView上的文本。在onCreateView中更改文本是完美的。

它的工作方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.fragment_gps, container, false);

    gpsLongitude = (TextView) myView.findViewById(R.id.gps_longitude);
    gpsLongitude.setText("something");

    return myView;
}

但当我这么做的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private double longitude;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.fragment_gps, container, false);

    gpsLongitude = (TextView) myView.findViewById(R.id.gps_longitude);

    return myView;
}

...

public void onLocationChanged(Location location) {

    Log.e("GPS", "found signal");
    longitude = location.getLongitude();
    gpsLongitude.setText("Longitude: " + Double.toString(longitude));

}

我得到:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)‘

(这发生在我得到: E/GPS:在logcat中找到信号之后)

如果我这么做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onLocationChanged(Location location) {

    gpsLongitude = (TextView) getView().findViewById(R.id.gps_longitude);
    gpsLongitude.setText("Longitude: " + Double.toString(longitude));
}

同样的事情也发生了:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)‘

这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onLocationChanged(Location location) {

    gpsLongitude = (TextView) getView().findViewById(R.id.gps_longitude);
    gpsLongitude.setText("something");

}

在以下方面的成果:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)‘

XML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/gps_longitude"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Longitude"
        android:textSize="40dp"
        android:textAlignment="center"
        android:layout_margin="10dp"/>
    <TextView
        android:id="@+id/gps_latitude"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Latitude"
        android:textSize="40dp"
        android:textAlignment="center"
        android:layout_margin="10dp"/>
    <TextView
        android:id="@+id/gps_altitude"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Altitude"
        android:textSize="40dp"
        android:textAlignment="center"
        android:layout_margin="10dp"/>
    <TextView
        android:id="@+id/gps_speed"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Speed"
        android:textSize="40dp"
        android:textAlignment="center"
        android:layout_margin="10dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="75dp"
        android:gravity="center">
        <Button
            android:onClick="onStartButtonClick"
            android:id="@+id/gps_start"
            android:layout_width="150dp"
            android:layout_height="match_parent"
            android:text="Start"
            android:textSize="20dp"/>
        <Button
            android:onClick="onStopButtonClick"
            android:id="@+id/gps_stop"
            android:layout_width="150dp"
            android:layout_height="match_parent"
            android:text="Stop"
            android:textSize="20dp"/>

    </LinearLayout>

</LinearLayout>
</ScrollView>

几个小时以来一直在寻找答案。

编辑:

MainActivity.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    GPSFragment locationListener = new GPSFragment();
    if (android.os.Build.VERSION.SDK_INT > 23) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{
                    Manifest.permission.ACCESS_FINE_LOCATION
            }, 10);
            return;
        }
    }
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,locationListener);
EN

回答 4

Stack Overflow用户

发布于 2016-08-21 03:15:07

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private double longitude;
private ViewGroup myView = null;


@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.fragment_gps, container, false);
    return myView;
}

public void onLocationChanged(Location location) {

    Log.e("GPS", "found signal");
    if (null != myView) {
        TextView gpsLongitude = (TextView) myView.findViewById(R.id.gps_longitude);
        longitude = location.getLongitude();
        gpsLongitude.setText("Longitude: " + Double.toString(longitude));
    }


}
票数 0
EN

Stack Overflow用户

发布于 2016-08-21 03:26:04

将视图传递给这样的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public void onLocationChanged(Location location, View view) {

    gpsLongitude = (TextView) view.findViewById(R.id.gps_longitude);
    gpsLongitude.setText("something");

}

调用方法时,传递视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
onLocationChanged(location,myView);
票数 0
EN

Stack Overflow用户

发布于 2016-08-21 18:00:51

首先,确保您在android.location.LocationListener中实现了正确的Fragment接口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class GPSFragment extends Fragment implements LocationListener {
...
}

您应该在requestLocationUpdates中请求onCreateView()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.fragment_gps, container, false);
    gpsLongitude = (TextView) myView.findViewById(R.id.gps_longitude);

    LocationManager lm= (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0, (android.location.LocationListener) this);

    return myView;
}


@Override
public void onLocationChanged(Location location) {
    if(location==null){
        gpsLongitude.setText("Unknown location");
    }else {
        Log.e("GPS", "found signal");
        double longitude = location.getLongitude();
        gpsLongitude.setText("Longitude: " + Double.toString(longitude));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39063411

复制
相关文章
Apache URL重写规则
  Apached的重写功能,即是mod_rewrite模块功能,它是apache的一个模块。它的功能非常强大,可以操作URL中的所有部分。
那一叶随风
2018/08/22
3K0
Apache URL重写规则
安装和使用IIS的URL重写工具
这几天正在忙自己的个人网站,遇到一个需求,就是把普通的http请求全部转发到https上。百度得知,使用默认的IIS功能无法做到这一点,必须安装一个额外的工具:URL重写工具。但是默认没有安装。这里就来先安装一下。
乐百川
2022/05/05
2.7K0
IIS虚拟主机支持URL重写指南
IIS虚拟主机支持.htaccess实现URL重写,下载合适的版本,下载手动安装包ISAPI_Rewrite3_0042_manual.exe,需要手工解压到服务器的一个目录中。
会长君
2023/04/26
4.4K0
IIS URL文件名有加号或空格显示404错误的解决办法
请求筛选模块被配置为拒绝包含双重转义序列的请求。HTTP 错误 404.11 - Not Found
2021/11/08
1.2K0
IIS URL文件名有加号或空格显示404错误的解决办法
URL重写
(图片来自:https://github.com/Bikeman868/UrlRewrite.Net)
问问计算机
2021/05/08
5K0
URL重写
WINDOWS网站IIS可以URL重写到站外的方式即IIS反向代理
iis现在都提供URL重写模块,可以在站内任意跳转,但我们相跳转到别的站点该怎么办呢?
睿儿网络郝刚
2020/09/08
3K0
WINDOWS网站IIS可以URL重写到站外的方式即IIS反向代理
iis站点设置错误页面返回http状态码为404而不是302或其他
  今天一位客户说网站错误页面返回的状态码是302而不是404,问ytkah要如何处理。这个应该是设置没有正确的原因。我们一步步来排查一下。1、首先打开iis管理器,左侧选择具体的站点,在右侧窗口中点击404错误页,如下图所示
ytkah
2019/09/25
3.3K0
iis站点设置错误页面返回http状态码为404而不是302或其他
IIS进行URL重写——实现https重定向,文件类型隐藏访问重写,nodejs等服务重写等等
一、Why? 1、先来讲一讲为什么我们要使用url重写这个东西 2、因为我学习的后端是nodejs,然后我发现nodejs一个非常让人难受的事,就是它监听端口不是80和443时,你访问网页需要输入端口
SpiritLing
2018/04/16
15.3K2
IIS进行URL重写——实现https重定向,文件类型隐藏访问重写,nodejs等服务重写等等
Url Rewrite 再说Url 重写
前几天看到园子里一篇关于 Url 重写的文章《获取ISAPI_Rewrite重写后的URL》 , URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次。搜索一下URL-Rewrite可以找到很多URL-Rewrite方面的文章和组件,自己以前也多次接触过这个东东,也来说说吧。 ScottGu 有一篇非常经典的 URL-Rewrite Blog Tip/Trick: Url Rewriting with ASP.NET http://weblogs.asp.net/scot
葡萄城控件
2018/01/10
4.6K0
Url Rewrite 再说Url 重写
Nginx url 重写
和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持。
星哥玩云
2022/09/15
2.6K0
Nginx url 重写
Nginx URL重写
rewite 规则作用 Rewrite规则可以实现对url的重写,以及重定向 --作用场景 URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等 SEO优化 维护:后台维护、流量转发等 安全 rewrite 语法 rewrite <regex> <replacement> [flag]; 关键字 正则 替代内容 flag标记 --解释 关键字 其中关键字error_log不能改变 正则 perl兼容正
剧终
2020/12/31
1.1K0
windows2003为iis添加伪静态规则
最近开始使用一个新的cms,网站由于是基于thinkphp开发的,而服务器还是古老的windows2003,所以一些伪静态的问题导致网站始终安装不成功。 可能以后不会用到了,这里还是记录下解决的办法
用户1188347
2018/02/27
2.7K0
windows2003为iis添加伪静态规则
IIRF(Ionics Isapi Rewrite Filt er)实现在IIS 5/6上重写Url
IIS 7的URL Rewrite功能非常强大,可以通过Microsoft URL Rewrite Module来实现,可参看文章使用Microsoft URL Rewrite Module for IIS 7.0修改WEB.CONFIG即可实现*.HTML伪静态 无需修改应用程序映射。 IIS 5/6的URL Rewrite也可以通过IIRF(Ionic's Isapi Rewrite Filter)来实现。IIRF(Ionic's Isapi Rewrite Filter)是一款开源的重写URL过滤器,
张善友
2018/01/30
1.7K0
springMVC的url重写
 1.利用maven下载相关jar文件,pom文件配置如下:
似水的流年
2018/01/14
1.2K0
nginx配置url重写
url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等
landv
2020/03/03
2.5K0
springMVC的url重写
3.添加urlrewirte.xml文件,将文件放在WEB-INF目录下(貌似该文件只能放在WEB-INF下)。配置如下:
似水的流年
2019/12/11
1.1K0
nginx配置url重写
url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等
PM吃瓜
2019/08/13
1.8K0
.htaccess的重写规则
.htaccess是Apache服务器的一个非常强大的分布式配置文件。 正确的理解和使用.htaccess文件,可以帮助我们优化自己的服务器或者虚拟主机。
Java架构师必看
2021/03/22
1.9K0
springMVC的url重写
 1.利用maven下载相关jar文件,pom文件配置如下: <dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version>3.2.0</version> </dependency> 2.在web.xml中配置UrlRewriteFilter,配置如下:         <!--urlrewrite过滤器-
似水的流年
2018/01/18
1.4K0
搜索优化:利用IIS的URL重写模块配置IIS让不带www的域名永久301到www上面。
在对网站做优化的时候通常会让不带www的域名如zjkdh.com永久301到自已要优化的域名上面,如(www.zjkdh.com),这么做就是为了集权,把所有域名的权重集到一个上面,这样的话有可能会使你域名的权重更集中,不分散,这种前提下有可能会比不处理的情况涨的多一些。
睿儿网络郝刚
2020/09/08
3.3K0
搜索优化:利用IIS的URL重写模块配置IIS让不带www的域名永久301到www上面。

相似问题

Url重写规则导致404错误

12

IIS重写不工作- 404错误

23

IIS Url重写规则

13

IIS URL重写规则- IIS 7

12

IIS 8重写规则显示404错误

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文