当我在我的设备上运行我的应用程序时出现此错误: logcat的
07-15 14:09:00.808:E / AndroidRuntime(1831):致命异常:主要 07-15 14:09:00.808:E / AndroidRuntime(1831):处理:com.example.findmycar,PID:1831 07-15 14:09:00.808:E / AndroidRuntime(1831):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.findmycar / com.findmycar.activity.PosizioneAttualeActivity}:java.lang.NullPointerException 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.os.Handler.dispatchMessage(Handler.java:102) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.os.Looper.loop(Looper.java:136) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.ActivityThread.main(ActivityThread.java:5017) 07-15 14:09:00.808:E / AndroidRuntime(1831):at java.lang.reflect.Method.invokeNative(Native Method) 07-15 14:09:00.808:E / AndroidRuntime(1831):at java.lang.reflect.Method.invoke(Method.java:515) 07-15 14:09:00.808:E / AndroidRuntime(1831):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 07-15 14:09:00.808:E / AndroidRuntime(1831):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 07-15 14:09:00.808:E / AndroidRuntime(1831):at dalvik.system.NativeStart.main(Native Method) 07-15 14:09:00.808:E / AndroidRuntime(1831):引起:java.lang.NullPointerException 07-15 14:09:00.808:E / AndroidRuntime(1831):at com.findmycar.activity.PosizioneAttualeActivity.onLocationChanged(PosizioneAttualeActivity.java:264) 07-15 14:09:00.808:E / AndroidRuntime(1831):at com.findmycar.activity.PosizioneAttualeActivity.onCreate(PosizioneAttualeActivity.java:86) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.Activity.performCreate(Activity.java:5231) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 07-15 14:09:00.808:E / AndroidRuntime(1831):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 07-15 14:09:00.808:E / AndroidRuntime(1831):... 11 more
这里有.java
package com.findmycar.activity;
import java.util.ArrayList;
import java.util.List;
import com.example.findmycar.R;
import com.findmycar.activity.MainActivity.erroreDialogFragment;
import com.findmycar.activity.MainActivity.simulaLoginDialogFragment;
import com.findmycar.data.Posizione;
import com.findmycar.data.PosizioniDAO;
import com.findmycar.utility.Session;
import com.google.android.gms.maps.CameraUpdateFactoryimport com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class PosizioneAttualeActivity extends Activity implements LocationListener {
TextView posizioneAttualeWellcome ,latText, lngText, descrizioneText, statoText;
Button parcheggia, riparti;
LocationManager locationManager;
String provider, username = "";
float lat ,lng ;
Posizione attiva = null, attuale = null;
Location location;
private PosizioniDAO posizioniData;
private GoogleMap FMCMap;
List<Marker> listaMarkerStorico = new ArrayList<Marker>();
protected void onCreate(Bundle savedInstanceState) {
boolean logged = false;
if(Session.containsPreference(getApplicationContext(), "username")){
logged = true;
username = Session.getPreference(getApplicationContext(), "username");
}
else {
Log.i("my_security", "l'utente non ha il permesso di accedere a questa vista");
Intent i = new Intent(PosizioneAttualeActivity.this, MainActivity.class);
startActivity(i);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.posizione_attuale);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!enabled) {
gpsDialogFragment l = new gpsDialogFragment();
l.show(getFragmentManager(), "gpsDialogFragment");
}
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 400, 1, this);
onLocationChanged(location);
FMCMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.PosizioneAttualeMapfragment)).getMap();
FMCMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
setUpView();
}
public void setUpMarker(Posizione posizione){
LatLng location=new LatLng(Double.valueOf(posizione.getLat()),Double.valueOf(posizione.getLng()));
Marker marker = FMCMap.addMarker(new MarkerOptions().position(location).title(posizione.getDescrizione()).icon(BitmapDescriptorFactory.fromResource(R.drawable.logoattivo)));
if(posizione.getStato()=="1"){
marker.remove();
Marker markerNonAttivo = FMCMap.addMarker(new MarkerOptions().position(location).title(posizione.getDescrizione()).icon(BitmapDescriptorFactory.fromResource(R.drawable.logononattivo)));
listaMarkerStorico.add(markerNonAttivo);
}
}
public void setUpView(){
posizioniData = new PosizioniDAO(this);
posizioniData.open();
attiva = posizioniData.getPosizioneAttiva(username);
posizioneAttualeWellcome = (TextView)findViewById(R.id.posizioneAttualeWellcomeTextView);
latText = (TextView)findViewById(R.id.latTextView);
lngText = (TextView)findViewById(R.id.lngTextView);
descrizioneText = (TextView)findViewById(R.id.descrizioneTextView);
statoText = (TextView)findViewById(R.id.statoTextView);
parcheggia = (Button)findViewById(R.id.parcheggiaButton);
riparti = (Button)findViewById(R.id.ripartiButton);
if(attiva == null ){
attiva = new Posizione();
attiva.setDescrizione("Vuoi Parcheggiare qui ?");
attiva.setLat("");
attiva.setLng("");
attiva.setStato("1");
latText.setVisibility(View.INVISIBLE);
lngText.setVisibility(View.INVISIBLE);
statoText.setVisibility(View.INVISIBLE);
parcheggia.setVisibility(View.VISIBLE);
riparti.setVisibility(View.INVISIBLE);
}
else {
latText.setVisibility(View.VISIBLE);
lngText.setVisibility(View.VISIBLE);
statoText.setVisibility(View.VISIBLE);
parcheggia.setVisibility(View.INVISIBLE);
riparti.setVisibility(View.VISIBLE);
setUpMarker(attiva);
}
posizioneAttualeWellcome.setText("la Tua Posizione attuale Ë lat:"+lat+", lng: "+lng+" "+username);
latText.setText(attiva.getLat());
lngText.setText(attiva.getLng());
statoText.setText(attiva.getStato());
descrizioneText.setText(attiva.getDescrizione());
OnClickListener parcheggiaListener = new OnClickListener(){
@Override
public void onClick(View v) {
Log.i("my_log", "cliccato parcheggia "+v.getId());
attiva.setLat(String.valueOf(lat));
attiva.setLng(String.valueOf(lng));
attiva.setUtente(username);
posizioniData.creaPosizione(attiva);
setUpView();
}
};
parcheggia.setOnClickListener(parcheggiaListener);
OnClickListener ripartiListener = new OnClickListener(){
@Override
public void onClick(View v) {
Log.i("my_log", "cliccato riparti "+v.getId());
posizioniData.ripartiDaPosizione(attiva);
setUpView();
}
};
riparti.setOnClickListener(ripartiListener);
}
@Override
public void onLocationChanged(Location location) {
lat = (float) (location.getLatitude());
lng = (float) (location.getLongitude());
setUpView();
}
}
我认为问题是关于onLocationChanged()的方法,实际上第86行和第264行的logcat中的错误是指这些行:
第86行
onLocationChanged(location);
第264行
lat = (float) (location.getLatitude());
答案 0 :(得分:0)
在onCreate
方法中,您获取提供商的最后一个已知位置并致电onLocationChanged
,但根据documentation for getLastKnownLocation:
Returns the last known location for the provider, or null
在使用null
方法或onLocationChanged
方法(或两者)调用onCreate
之前,您需要检查位置是否为onLocationChanged
。