我是Android開發人員的初學者。我在我的應用程序,我有GPS和導航抽屜工作。我的目標是在一個片段中顯示座標。我有應用程序將GPS數據輸入到logcat
,現在我試圖從onLocationChanged
方法更改TextvView
上的文本。更改onCreateView
中的文本完美無瑕。當TextView在片段內的onLocationChanged內更改時,應用程序崩潰
它的工作原理是這樣的:
@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;
}
但不是當我這樣做:
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:試圖調用虛擬方法'null'對象上的'android.view.View android.view.View.findViewById(int)'參考
(出現這種情況之後,我得到:E/GPS:發現在logcat的信號)
如果我這樣做:
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)'參考
這樣做:
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:
<?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的:
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);
你的滾動視圖XML,這是你的mainactivity的佈局? – TWL
沒有那是片段的xml文件。但我發現下面我看到了一個解決方案,我爲那些可能會遇到同樣問題的人發佈瞭解決方案。 – slole