2015-05-18 36 views
-1

我有一個問題,我需要使用asynctask在地圖片段上添加標記。 這裏我的AsyncTask類使用asynctask在地圖片段上添加標記

private class LoadViewTask extends AsyncTask<Void, MyTaskParams, Void> { 
    private SearchListAdapter adapter; 
    // Before running code in separate thread 
    @Override 
    protected void onPreExecute() { 
     String filterRev = ""; 
     try { 
      filterRev = URLEncoder.encode(
        MainActivity.FILTER_SEARCH_ENTERPRISE, "utf-8"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     final String dummyURL5star = MainActivity.BASE_URL 
       + "v_enterprise-select5star.php?filteritem=" + filterRev; 

     xResult5star = MainActivity.getRequestSelect(dummyURL5star, 
       SearchActivity.this); 


     list = (ListView) findViewById(R.id.lvRowsEnterpriseSearch); 
     adapter = new SearchListAdapter(SearchActivity.this, listRow); 
     list.setAdapter(adapter); 
     registerForContextMenu(list); 
     //adapter = (SearchListAdapter) list.getAdapter(); 

    } 

    // The code to be executed in a background thread. 
    @Override 
    protected Void doInBackground(Void... params) { 

      /*final String dummyURL4star = MainActivity.BASE_URL 
        + "v_enterprise-select4star.php?filteritem=" + filterRev; 
      final String dummyURL3star = MainActivity.BASE_URL 
        + "v_enterprise-select3star.php?filteritem=" + filterRev; 
      final String dummyURL2star = MainActivity.BASE_URL 
        + "v_enterprise-select2star.php?filteritem=" + filterRev; 
      final String dummyURL1star = MainActivity.BASE_URL 
        + "v_enterprise-select1star.php?filteritem=" + filterRev; $*/   

      try { 
       jObject5 = new JSONObject(xResult5star); 
      JSONArray menuitemArray = jObject5.getJSONArray("venterprise"); 
       for (int i = 0; i < menuitemArray.length(); i++) { 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(KEY_IDENTERPRISE, menuitemArray.getJSONObject(i) 
          .getString("identerprise").toString()); 
        map.put(KEY_NAMAENTERPRISE, menuitemArray.getJSONObject(i) 
          .getString("nama").toString()); 
        map.put(KEY_ALAMATENTERPRISE, menuitemArray.getJSONObject(i) 
          .getString("address").toString()); 
        map.put(KEY_KATEGORI, 
          menuitemArray.getJSONObject(i).getString("linkkat") 
            .toString()); 
        map.put(KEY_LINK, 
          menuitemArray.getJSONObject(i).getString("linksub") 
            .toString()); 
        map.put(KEY_KAT, 
          menuitemArray.getJSONObject(i).getString("kategori") 
            .toString()); 
        map.put(KEY_SUB, 
          menuitemArray.getJSONObject(i).getString("subkategori") 
            .toString()); 
        map.put(KEY_IDKAT, 
          menuitemArray.getJSONObject(i).getString("idkategori") 
            .toString()); 
        map.put(KEY_IDSUB, 
          menuitemArray.getJSONObject(i) 
            .getString("idsubkategori").toString()); 
        map.put(KEY_THUMB_URL, menuitemArray.getJSONObject(i) 
          .getString("picture").toString()); 
        map.put(KEY_HITS, 
          menuitemArray.getJSONObject(i).getString("hit") 
            .toString()); 
        map.put(KEY_NOKONTRAKS, menuitemArray.getJSONObject(i) 
          .getString("nokontrak").toString()); 
        map.put(KEY_STAR, "5"); 

        LatLng companyPosition = new LatLng(Double.parseDouble(menuitemArray 
          .getJSONObject(i).getString("latitude").toString()), 
          Double.parseDouble(menuitemArray.getJSONObject(i) 
            .getString("longitude").toString())); 
        String nama = menuitemArray.getJSONObject(i) 
          .getString("nama").toString(); 
        String address = menuitemArray.getJSONObject(i) 
          .getString("address").toString(); 
        MyTaskParams company = new MyTaskParams(map, companyPosition, nama, address); 
        publishProgress(company); 
       } 

      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

    return null; 
    } 

    // Update the progress 
    @Override 
    protected void onProgressUpdate(MyTaskParams... values) { 
     mapCompany = ((MapFragment) getFragmentManager().findFragmentById(
       R.id.mapListSearch)).getMap(); 
     listRow.add(values[0].companyList); 
     mapCompany.addMarker(new MarkerOptions() 
     .title(values[0].nama) 
     .snippet(values[0].address) 
     .position(values[0].position) 
     .icon(BitmapDescriptorFactory 
       .defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
    } 

    // after executing the code in the thread 
    @Override 
    protected void onPostExecute(Void result) { 


    } 
} 

,這是我MyTaskParam類

public class MyTaskParams { 

HashMap<String, String> companyList = new HashMap<String, String>(); 
LatLng position = new LatLng(0, 0); 
String nama, address; 


MyTaskParams(HashMap<String, String> companyList, LatLng position, String nama, String address) { 
    this.companyList = companyList; 
    this.position = position; 
    this.nama = nama; 
    this.address = address; 

} 

}

我有一些情況,如果我做了上面的代碼,該列表將不會出現包括標記。

但是,如果我只通過HashMap和改變MyTaskParam becom這樣的:

public class MyTaskParams { 

HashMap<String, String> companyList = new HashMap<String, String>(); 

MyTaskParams(HashMap<String, String> companyList) { 
    this.companyList = companyList; 

} 

}

MyTaskParams company = new MyTaskParams(map); 
        publishProgress(company); 

和progressUpdate這樣的:

protected void onProgressUpdate(MyTaskParams... values) { 

     listRow.add(values[0].companyList); 

    } 

列表中出現很好 有沒有人有過同樣的問題? 我該如何解決這個問題? 謝謝

回答

0

您只能在前後執行方法中使用UI。從後臺函數獲取數據並在後執行方法中填充標記。

相關問題