2013-06-07 1 views
0

json 파서에서 위도와 경도에 걸쳐 마커로 GoogleMap을 채우려고했습니다 ... AsyncTask로 시도했지만 작동하지 않습니다. 여기 내 코드가 도움이되었습니다. : 나는Json URL에서 AsyncTask로지도 채우기 Android

@Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map); 

     // Hashmap for ListView 
     magasinsList = new ArrayList<HashMap<String, String>>(); 

     // Loading products in Background Thread 
     new LoadAllProducts().execute(); 

    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // if result code 100 
     if (resultCode == 100) { 
      // if result code 100 is received 
      // means user edited/deleted product 
      // reload this screen again 
      Intent intent = getIntent(); 
      finish(); 
      startActivity(intent); 
     } 

    } 

    /** 
    * Background Async Task to Load all product by making HTTP Request 
    * */ 
    class LoadAllProducts extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(mapActivity.this); 

      pDialog.setMessage("Loading"); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 

     } 

     /** 
     * getting All products from url 
     * */ 
     protected String doInBackground(String... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      // getting JSON string from URL 
      JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); 

      // Check your log cat for JSON reponse 
      Log.d("All Markets: ", json.toString()); 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // products found 
        // Getting Array of Products 
        magasins = json.getJSONArray(TAG_MARKETS); 

        // looping through All Products 
        for (int i = 0; i < magasins.length(); i++) { 
         JSONObject c = magasins.getJSONObject(i); 

         // Storing each json item in variable 
         String id = c.getString(TAG_PID); 
         String nom = c.getString(TAG_NAME); 
         String ville = c.getString(TAG_VILLE); 
         String latitude = c.getString(TAG_LATITUDE); 
         String longitude = c.getString(TAG_LONGITUDE); 
         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put(TAG_PID, id); 
         map.put(TAG_NAME, nom); 
         map.put(TAG_VILLE, ville); 
         map.put(TAG_LATITUDE, latitude); 
         map.put(TAG_LONGITUDE, longitude); 
         // adding HashList to ArrayList 
         magasinsList.add(map); 


        } 
       } else { 
        // no products found 
        // Launch Add New product Activity 
       // Intent i = new Intent(getApplicationContext(), 
         // NewProductActivity.class); 
        // Closing all previous activities 
       // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       // startActivity(i); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 

     } 
     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      double latg=Double.parseDouble(TAG_LATITUDE); 
      double longg=Double.parseDouble(TAG_LONGITUDE); 
      final LatLng local = new LatLng(latg,longg); 
      Marker locations = googleMap.addMarker(new MarkerOptions() 
      .position(local) 
      .title(TAG_NAME) 
      .snippet(TAG_VILLE) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.gps))); 
//CameraUpdate center= 
// CameraUpdateFactory.newLatLng(new LatLng(latitude,longitude)); 
CameraUpdate zoom=CameraUpdateFactory.zoomTo(5); 

//googleMap.moveCamera(center); 
googleMap.animateCamera(zoom); 
      } 

편집 AsyncTask를 함께 JSON URL에서지도를 채울 수 있습니다 희망 : 이제 응용 프로그램 나던 ceash하지만 쇼 :이 로그 캣이

06-08 00:07:50.979: E/AndroidRuntime(5396): FATAL EXCEPTION: main 
06-08 00:07:50.979: E/AndroidRuntime(5396): java.lang.NullPointerException 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at com.example.mercure_fidelity.mapActivity$LoadAllProducts$1.run(mapActivity.java:180) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.app.Activity.runOnUiThread(Activity.java:4170) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at com.example.mercure_fidelity.mapActivity$LoadAllProducts.onPostExecute(mapActivity.java:177) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at com.example.mercure_fidelity.mapActivity$LoadAllProducts.onPostExecute(mapActivity.java:1) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.os.Looper.loop(Looper.java:137) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at android.app.ActivityThread.main(ActivityThread.java:4441) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-08 00:07:50.979: E/AndroidRuntime(5396):  at dalvik.system.NativeStart.main(Native Method) 
06-08 00:07:51.669: D/dalvikvm(5396): GC_CONCURRENT freed 1K, 7% free 13036K/13895K, paused 2ms+3ms 

편집 II를 표시 것입니다 내 위치 만 다른 위치의 표식이 아님 ... postExec에서 코드를 변경했습니다. 그런 식으로 ute 메서드 ...하지만지도에 액세스하려고 할 때 응용 프로그램이 다시 충돌합니다.

protected void onPostExecute(String file_url) { 

       runOnUiThread(new Runnable() { 
        public void run() { 
         if (results!=null && results.size() > 0) 
          { 

           for(int i=0; i<magasinsList.size(); i++) 
           { 


           magasin g=results.get(i); 
           double latg=Double.parseDouble(g.latitude); 
           double longg=Double.parseDouble(g.longitude); 
           final LatLng local = new LatLng(latg,longg); 
           Marker locations = googleMap.addMarker(new MarkerOptions() 
           .position(local) 
           .title(g.nom) 
           .snippet(g.ville) 
           .icon(BitmapDescriptorFactory.fromResource(R.drawable.gps))); 
    // CameraUpdate center= 
      // CameraUpdateFactory.newLatLng(new LatLng(latg,longg)); 
      CameraUpdate zoom=CameraUpdateFactory.zoomTo(5); 

     // googleMap.moveCamera(center); 
      googleMap.animateCamera(zoom); 
+2

가 정확히 무엇이 문제가있는됩니다 도움이되기를 바랍니다 샘플 및 더 많은 도움 here

과 함께이 here in the docs에 대한 자세한 정보를 찾을 수 있습니까? 오류? – codeMagic

+0

글쎄,지도에 액세스하려고 할 때 응용 프로그램이 충돌합니다. 오류가 발생했습니다 ... 데이터를 파싱하는 중 오류가 발생했습니다 ... org.json.jsonexception을 파싱하는 중 오류가 발생했습니다 ... doInBackground()를 실행하는 중에 오류가 발생했습니다. – Delgado

+0

Google에 알려 주시면 그들이 어디에 있고 어느 것이 범인인지 확인하십시오 – codeMagic

답변

1

당신이 값을 갖도록 초기화 할 필요를 사용하는 모든 변수를 이 (results.addAll((Collection<? extends magasin>) map); 결과 magasin의 목록입니다) 코드입니다. 그렇지 않으면 해당 변수에서

googleMap.addMarker(...) 

과 같은 메서드를 호출하면 NPE이됩니다. GoogleMap이라는 이름의 개체가 있다고 가정하고 getMap() 메서드로 초기화해야합니다.

당신은 내가이