【发布时间】:2014-09-06 01:54:13
【问题描述】:
当我在我的设备上运行我的应用程序时,会出现以下错误: 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): 在 java.lang.reflect.Method.invokeNative(Native Method) 07-15 14:09:00.808: E/AndroidRuntime(1831): 在 java.lang.reflect.Method.invoke(Method.java:515) 07-15 14:09:00.808: E/AndroidRuntime(1831): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 07-15 14:09:00.808: E/AndroidRuntime(1831): 在 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): 在 com.findmycar.activity.PosizioneAttualeActivity.onLocationChanged(PosizioneAttualeActivity.java:264) 07-15 14:09:00.808: E/AndroidRuntime(1831): 在 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 更多
这里有.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());
【问题讨论】:
-
请包含必要的最短代码以重现问题。
-
您提供的代码很长而且很混乱。很难找到错误的位置。此外,我们甚至不知道代码应该做什么。
-
也许
location为空? -
是的,一定是。
location = locationManager.getLastKnownLocation(provider);大概getLastKnownLocation可以返回null并且此代码不会检查。对。在getLastKnownLocation的文档中确认了
标签: java android exception nullpointerexception