AsyncTask的总是抛出NullPointerException [英] AsyncTask always throw NullPointerException

查看:456
本文介绍了AsyncTask的总是抛出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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆