AsyncTask的总是抛出NullPointerException [英] AsyncTask always throw NullPointerException
问题描述
我正在开发基于LBS应用的1.6版本,它是运行在它精美绝伦。此前它也运行更新的版本一样2.2&安培以下的罚款; 2.3.3。但现在突然它开始给我的AsyncTask类空指针异常,我已经使用了后台进程。这里是我的code。与错误日志片段。
I am developing LBS based app in 1.6 version and it is running absolutely fine in it. Earlier its also run fine in updated version like 2.2 & 2.3.3. But now suddenly it starts giving me null pointer exception in AsyncTask class which i have used for background processes. Here is my code snippet with Error Log.
public class AndroidLocationActivity extends Activity {
public String provider;
public double latitude, longitude = 0;
public LocationListener locationListener = new MyLocationListener();
public LocationManager locationManager;
public CurrentPositionTask getCurrentLocation;
public long time=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
setCriteria();
runAsyncTask();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
time = 0;
locationManager.removeUpdates(locationListener);
}
public void setCriteria() {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
provider = locationManager.getBestProvider(criteria, true);
//Toast.makeText(getApplicationContext(), "Provider - " + provider, Toast.LENGTH_SHORT).show();
if (provider == null) {
provider = LocationManager.GPS_PROVIDER;
}
}
public void runAsyncTask() {
// TODO Auto-generated method stub
if (getCurrentLocation == null) {
getCurrentLocation = new CurrentPositionTask(AndroidLocationActivity.this);
}
if (getCurrentLocation != null) {
getCurrentLocation.execute("Searching for Location");
}
}
public boolean checkConnection()
{
//ARE WE CONNECTED TO THE NET
ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable()&& conMgr.getActiveNetworkInfo().isConnected()) {
return true;
} else {
return false;
}
}
class CurrentPositionTask extends AsyncTask<String, Void, Void>
{
private ProgressDialog Dialog = new ProgressDialog(AndroidLocationActivity.this);
Location location = new Location(locationManager.getLastKnownLocation(provider));
Context context;
public CurrentPositionTask(Context mContext) {
this.context = mContext;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
time = location.getTime();
Toast.makeText(AndroidLocationActivity.this, String.valueOf(time), Toast.LENGTH_LONG).show();
if (checkConnection()) {
//Toast.makeText(getApplicationContext(), "Internet", Toast.LENGTH_LONG).show();
Dialog.setTitle("Loading");
Dialog.setMessage("Searching for Location");
Dialog.show();
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
}
else {
Toast.makeText(getApplicationContext(), "Internet is Not Available", Toast.LENGTH_LONG).show();
}
}
@Override
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
latitude = location.getLatitude();
longitude = location.getLongitude();
if (time >= 100000) {
latitude = 0;
longitude = 0;
}
while (latitude == 0 && longitude == 0) {
/*latitude = (float) (location.getLatitude());
longitude = (float) (location.getLongitude());*/
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
Toast.makeText(AndroidLocationActivity.this, "Location Floats:- " + latitude + "," + longitude, Toast.LENGTH_LONG).show();
super.onPostExecute(result);
if (Dialog != null && Dialog.isShowing()) {
Dialog.dismiss();
time=0;
Intent homeIntent = new Intent(AndroidLocationActivity.this.getApplicationContext(), HomeMenuActivity.class);
homeIntent.putExtra("lat", latitude);
homeIntent.putExtra("lng", longitude);
startActivity(homeIntent);
}
locationManager.removeUpdates(locationListener);
}
}
class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
latitude = location.getLatitude();
longitude = location.getLongitude();
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}
}
错误日志: -
12-04 16:59:04.848: E/AndroidRuntime(4165): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidlocation/com.androidlocation.AndroidLocationActivity}: java.lang.NullPointerException
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.os.Handler.dispatchMessage(Handler.java:99)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.os.Looper.loop(Looper.java:123)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.ActivityThread.main(ActivityThread.java:3701)
12-04 16:59:04.848: E/AndroidRuntime(4165): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 16:59:04.848: E/AndroidRuntime(4165): at java.lang.reflect.Method.invoke(Method.java:507)
12-04 16:59:04.848: E/AndroidRuntime(4165): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
12-04 16:59:04.848: E/AndroidRuntime(4165): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
12-04 16:59:04.848: E/AndroidRuntime(4165): at dalvik.system.NativeStart.main(Native Method)
12-04 16:59:04.848: E/AndroidRuntime(4165): Caused by: java.lang.NullPointerException
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.location.Location.set(Location.java:119)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.location.Location.<init>(Location.java:112)
**12-04 16:59:04.848: E/AndroidRuntime(4165): at com.androidlocation.AndroidLocationActivity$CurrentPositionTask.<init>(AndroidLocationActivity.java:84)**
12-04 16:59:04.848: E/AndroidRuntime(4165): at com.androidlocation.AndroidLocationActivity.runAsyncTask(AndroidLocationActivity.java:60)
12-04 16:59:04.848: E/AndroidRuntime(4165): at com.androidlocation.AndroidLocationActivity.onCreate(AndroidLocationActivity.java:31)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-04 16:59:04.848: E/AndroidRuntime(4165): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
3error这是我从日志中,1调用runAsyncTask()方法,在2在的AsyncTask类初始化位置变量的时间来创建异步任务类和第三对象的时间了。
3error which i got from log, 1 in calling the runAsyncTask() method, 2 at the time of creating object of async task class and 3rd at the time of initializing the location variable in asynctask class.
请如果任何人有这个任何想法请帮我解决一下。谢谢...
Please if anybody has any idea about this please help me to solved it out. Thanks...
推荐答案
位置位置=新的位置(locationManager.getLastKnownLocation(供应商))
可以为空,尝试做一个空检查前:
Location location = new Location(locationManager.getLastKnownLocation(provider))
can be null, try make a null check before:
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
time = location.getTime();
...
这篇关于AsyncTask的总是抛出NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!