2016-10-04 10 views
1

AsyncTaskクラス内のグローバル変数から値を取得するときに問題があります。私はここに私のAsyncTaskクラスコードだ他のクラス(AsyncTask)からのリスト値の取得方法(アクティビティクラス..)

...別のクラスから呼び出したい:

public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> { 

    List<NearbyPlaceModel> data_place = new ArrayList<>(); 
    JSONObject googlePlacesJson; 
    GoogleMap googleMap; 

    @Override 
    protected List<HashMap<String, String>> doInBackground(Object... inputObj) { 

     List<HashMap<String, String>> googlePlacesList = null; 
     Places placeJsonParser = new Places(); 

     try { 
      googleMap = (GoogleMap) inputObj[0]; 
      googlePlacesJson = new JSONObject((String) inputObj[1]); 
      googlePlacesList = placeJsonParser.parse(googlePlacesJson); 
     } catch (Exception e) { 
      Log.d("Exception", e.toString()); 
     } 
     return googlePlacesList; 
    } 

    @Override 
    protected void onPostExecute(List<HashMap<String, String>> list) { 
     googleMap.clear(); 
     data_place.clear(); 
     for (int i = 0; i < list.size(); i++) { 
      if(i < 10) { 
       HashMap<String, String> googlePlace = list.get(i); 
       double lat = Double.parseDouble(googlePlace.get("lat")); 
       double lng = Double.parseDouble(googlePlace.get("lng")); 
       String placeName = googlePlace.get("place_name"); 
       String vicinity = googlePlace.get("vicinity"); 
       LatLng latLng = new LatLng(lat, lng); 
       markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon")))); 
       markerOptions.title(placeName + " : " + vicinity); 
       googleMap.addMarker(markerOptions); 

       NearbyPlaceModel items = new NearbyPlaceModel(); 
       items.setVicinity(vicinity); 
       items.setPlace_name(placeName); 
       items.setLat(String.valueOf(lat)); 
       items.setLang(String.valueOf(lng)); 
       data_place.add(items); 
      } 
     } 
    } 

} 

私はこのように、私の活動である別のクラスからのグローバル変数data_place = new ArrayList<>();を設定したい...

ListView nearby_place = (ListView) findViewById(R.id.itemListView); 
    ListAdapter customAdapter = new ListAdapter(this, R.layout.nearby_place_listview, data_place); 
    nearby_place.setAdapter(customAdapter); 

また、私のコードに何か間違っていましたか?

+1

AsyncTaskが別のクラスであるため、[OnPostExecute()の結果をメインアクティビティに取得する方法は?](http://stackoverflow.com/questions/12575068/how-to-get-the- asynctask-is-a) –

答えて

0

インターフェイスを使用して結果を得ることができます。

  1. 必要なコールバックメソッドを使用してインターフェイスを作成します。
  2. あなたがここで私はあなたのコードに基づく例を与えている、あなたのコールバックメソッド

に結果を取得します

  • 、あなたの活動でそれを実装します。 あなたMainActivityクラスは、あなたのPlacesDisplayTaskクラスはthis-

    public class PlacesDisplayTask extends AsyncTask<Object, Integer, List<HashMap<String, String>>> { 
    
        ArrayList<NearbyPlaceModel> data_place = new ArrayList<>(); // change 
        JSONObject googlePlacesJson; 
        GoogleMap googleMap; 
        PlaceInterface placeInterface; // change 
    
        public PlacesDisplayTask(PlaceInterface placeInterface){ // change 
         this.placeInterface = placeInterface; 
        } 
    
        @Override 
        protected List<HashMap<String, String>> doInBackground(Object... inputObj) { 
    
         List<HashMap<String, String>> googlePlacesList = null; 
         Places placeJsonParser = new Places(); 
    
         try { 
          googleMap = (GoogleMap) inputObj[0]; 
          googlePlacesJson = new JSONObject((String) inputObj[1]); 
          googlePlacesList = placeJsonParser.parse(googlePlacesJson); 
         } catch (Exception e) { 
          Log.d("Exception", e.toString()); 
         } 
         return googlePlacesList; 
        } 
    
        @Override 
        protected void onPostExecute(List<HashMap<String, String>> list) { 
         googleMap.clear(); 
         data_place.clear(); 
         for (int i = 0; i < list.size(); i++) { 
          if(i < 10) { 
           HashMap<String, String> googlePlace = list.get(i); 
           double lat = Double.parseDouble(googlePlace.get("lat")); 
           double lng = Double.parseDouble(googlePlace.get("lng")); 
           String placeName = googlePlace.get("place_name"); 
           String vicinity = googlePlace.get("vicinity"); 
           LatLng latLng = new LatLng(lat, lng); 
          markerOptions.icon(BitmapDescriptorFactory.fromBitmap(Configure.getBitmapFromURL(googlePlace.get("icon")))); 
           markerOptions.title(placeName + " : " + vicinity); 
           googleMap.addMarker(markerOptions); 
    
           NearbyPlaceModel items = new NearbyPlaceModel(); 
           items.setVicinity(vicinity); 
           items.setPlace_name(placeName); 
           items.setLat(String.valueOf(lat)); 
           items.setLang(String.valueOf(lng)); 
           data_place.add(items); 
    
           placeInterface.myPlaceList(data_place); // change 
          } 
         } 
        } 
    
    } 
    

    ようにする必要がありthis-

    public class MainActivity extends AppCompatActivity implements PlaceInterface{ 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
    
         // your code... 
    
         // calling the AsyncTask and send reference of the interface on it 
         new PlacesDisplayTask(this).execute(); // something like this 
    
        } 
    
    
        @Override 
        public void myPlaceList(ArrayList<NearbyPlaceModel> nearbyPlaceModelArrayList) { 
         ListView nearby_place = (ListView) findViewById(R.id.itemListView); 
         ListAdapter customAdapter = new ListAdapter(this, R.layout.nearby_place_listview, nearbyPlaceModelArrayList); 
         nearby_place.setAdapter(customAdapter); 
        } 
    } 
    

    ようにする必要があり、これは、これはあなたを助ける

    public interface PlaceInterface { 
        void myPlaceList(ArrayList<NearbyPlaceModel> nearbyPlaceModelArrayList); 
    } 
    

    希望Interface-です。 :)

  • +0

    ありがとう、それは動作します;) –

    0

    正しく理解すれば! AsyncTaskクラスで、getterメソッドとsetterメソッドを作成します。これにより、data_placeを取得して、自分のアクティビティからdata_placeを設定できます。

    +0

    yeahh私はこれのようないくつかのメソッドを作成しましたが、どのようにアクティビティから取得するのですか? –

    +0

    AsyncTaskのexecuteメソッドを呼び出すとどうなりますか? –

    +0

    私は他のasyncTaskから実行コードを呼び出すので、私は最後の結果から直接取得し、アクティビティから取得したいと思います:MainActivity-> AsyncTask-> AsyncTask .. –

    関連する問題