2013-02-24 178 views
0

我試圖解決這個問題:發送到onProgressUpdate()方法的座標等於0.0。使用調試器,我發現方法getLatitude(),getLongitude()返回0.0。問題是,這些方法,他們的課程是好的(我以前使用過)。 Here's的MainActivity簡化代碼:Android AsyncTask無法獲取GPS位置

public class MainActivity extends Activity { 

Button btnStart; 
MyTask objMyTask; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 

    btnStart = (Button) findViewById(R.id.btnstart); 
    btnStart.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      objMyTask = new MyTask(); 
      objMyTask.execute(); 
     } 
    }); 
} 

class MyTask extends AsyncTask<Void, Double, Integer> { 
GPSTracker gps; 
    @Override 
    protected Integer doInBackground(Void... params) 
    { 
     Double latitude, longitude; 
     long t = System.currentTimeMillis()-6000; 
     long currentTime = t; 
     int i = 0; 
     gps = new GPSTracker(MainActivity.this); 
     while(i < 5) 
     { 
      currentTime = System.currentTimeMillis(); 
      if((currentTime - t) >= 5000) 
      { 
       i++; 
       if(gps.canGetLocation()){ 
        latitude = gps.getLatitude(); 
        longitude = gps.getLongitude(); 
        Double[] resultArray = new Double[2]; 
        resultArray[0] = latitude; 
        resultArray[1] = longitude; 
        publishProgress(resultArray); 
       }else{ 
        gps.showSettingsAlert(); 
       } 
       t = System.currentTimeMillis(); 
      } 
     } 
     return 0; 
    } 

    @Override 
    protected void onProgressUpdate(Double... values) {  
     super.onProgressUpdate(values); 
     Toast.makeText(getApplicationContext(), "Latitude: "+values[0]+"\nLongitude"+values[1], Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     ... 
    } 

} 

}

我覺得這個問題是在GPSTracker構造,也許上下文是不是從創建此線程從來就訪問。這裏的構造函數:

public GPSTracker(Context context) { 
    this.mContext = context; 
    getLocation(); 
} 

我已經沒有想法如何解決這個問題。在此先感謝您的幫助。

+0

在你的GPSTracker中,你可以打印出什麼東西,當你得到緯度到日誌?也許你正在得到0,0因爲經緯度從未設置...? – bgs 2013-02-24 23:24:30

+0

使用調試器,我發現GPSTracker內部的經度和緯度都是0,0。但是,正如我所說,這個GPSTracker在主要活動中正常工作。當我創建AsyncTask並在裏面使用GPSTracker時,問題就出現了。 – Tom11 2013-02-25 11:08:12

+0

您可以將應用程序上下文而不是本地上下文傳遞給您的GpsTracker嗎? – bgs 2013-02-25 17:24:46

回答

1
public GPSTracker(Context context) { 
    this.mContext = context.getApplicationContext(); 
    getLocation(); 
}