0

ShowListはいくつかのedittextフィールドとbuttons. を取得する " " がありbuttonます。get locationcurrent locationGPS

(ShowList activity正常に動作します。取得できますlocation):

  public class ShowList extends Activity implements OnClickListener{


GPSTracker gps;   //i use GPSTracker to get the location (it is not an activity)
     .........

 case R.id.getlocation:
    // create class object
   gps = new GPSTracker(ShowList.this);

  // check if GPS enabled
 if(gps.canGetLocation()){

          double latitude = gps.getLatitude();
          double longitude = gps.getLongitude();

Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
                    }else{
                        ...
                    }

カスタムアダプターがあります:

    public class myAdapter extends BaseAdapter{   
         ShowList locationclass=new ShowList();
         .....
        TextView Location = (TextView) convertView.findViewById(R.id.text_location);

            String lat=Double.toString(locationclass.gps.getLatitude());
            String lo=Double.toString(locationclass.gps.getLongitude());
            String coordinates="Lat: " + lat + "  Long: " + lo;
            Location.setText(coordinates);

「String lat...」nullpointerで受け取ります。

locationでは、 fromShowList activityを toに渡すにはどうすればよいadapterでしょうか。

4

4 に答える 4

1

アクティビティのインスタンスを次のように作成しないでください。

ShowList locationclass=new ShowList();

代わりに、渡したいパラメーターを使用してアダプターを呼び出します

MyAdapter myAdapter = new MyAdaper(latitude, longitude);

MyAdapterそれに応じてコンストラクタを変更します。

注意: クラス名を小文字で始めないでください。適切な命名規則に従ってください。

編集:(OPのコメントへの返信)

アクティビティ ShowList.java でアダプタ クラスのオブジェクトを作成している場合は、呼び出しを次のように変更します。

MyAdapter theAdapter = new MyAdaper(latitude, longitude);

そして、クラスMyAdapter.javaを次のように変更します。

public class myAdapter extends BaseAdapter{ 
    Strig latitude, longitude;  

    public MyAdapter(String lat, String long)
    {
        this.latitude=lat;
        this.longitude = long;
    }
    TextView Location = (TextView) convertView.findViewById(R.id.text_location);

    String lat=Double.toString(latitude);
    String lo=Double.toString(longitude);
    String coordinates="Lat: " + lat + "  Long: " + lo;
    Location.setText(coordinates);
于 2013-04-08T11:19:24.427 に答える
0

まず:

このように Android で Activity を作成することはありません

ShowList locationclass=new ShowList();

Os は、startActivity や startActivityForResult などの提供されたデリゲートを介してアクティビティ インスタンスを作成します。データを運ぶために同じインスタンスを使用し、同じ参照から読み取ったデータを渡す必要があります。

あなたの場合、アダプターは元のアクティビティ参照を保持する必要があります。

第二に。

GPS 位置情報の追跡には数秒から数分かかる場合があります。また、デバイスでオープン スカイを利用できるかどうかによっては、位置情報が更新されない場合もあります。他の環境要因によって異なります。

そのため、ロケーション マネージャーからロケーションの更新がアクティビティに通知された後でのみ、アダプターを呼び出してロケーションを表示する必要があります。ただし、その前に位置情報の更新をリクエストする必要があります。そして、場所を取得したら。さらに更新を取得するためのリクエストをキャンセルします。

Android で GPS がどのように機能するか、およびそれに関連するベスト プラクティスについては、さらに詳しく調べる必要があります。それが役に立てば幸い

于 2013-04-08T11:27:08.397 に答える