Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AsyncTask Android从Json URL填充映射_Android_Json_Map_Android Asynctask - Fatal编程技术网

使用AsyncTask Android从Json URL填充映射

使用AsyncTask Android从Json URL填充映射,android,json,map,android-asynctask,Android,Json,Map,Android Asynctask,我试图用json解析器中跨越纬度和经度的标记填充Google地图。。。我尝试使用AsyncTask,但它不起作用。。这是我的代码,感谢你们的帮助:我希望我可以用AsyncTask从Json URL填充映射 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ma

我试图用json解析器中跨越纬度和经度的标记填充Google地图。。。我尝试使用AsyncTask,但它不起作用。。这是我的代码,感谢你们的帮助:我希望我可以用AsyncTask从Json URL填充映射

 @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);
            }
编辑II:现在应用程序没有停止,但它只显示我的位置,而不显示其他位置的标记…我在postExecute方法中这样更改了代码…但当我尝试访问地图时,应用程序再次崩溃。
这是代码(其中results是magasin的列表:
results.addAll((Collection您使用的任何变量都需要初始化才能有值)。否则,对该变量调用方法,例如

googleMap.addMarker(...)
这里的结果是一个
NPE
。我假设它是一个名为
GoogleMap
的对象,因此需要使用
getMap()
方法初始化它

您可以通过示例和更多帮助找到有关此的更多信息


我希望这有帮助

您到底遇到了什么问题?错误?好吧;当我尝试访问地图时,应用程序崩溃,我遇到了这些错误转换结果时出错…错误解析数据org.json.jsonexception…执行doInBackground()时出错发布您的日志,这样我们就可以看到它们在哪里以及谁是罪魁祸首了好吧,我将把它添加到问题的第134行?这是一条注释128//将每个json项存储在变量129 String id=c.getString(TAG_PID);130 String nom=c.getString(TAG_NAME);131 String ville=c.getString(TAG_ville);132字符串纬度=c.getString(TAG_纬度);133字符串经度=c.getString(TAG_经度);134//创建新的HashMap 135 HashMap map=新的HashMap();136//将每个子节点添加到HashMap key=>值137 map.put(TAG_PID,id);
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);
googleMap.addMarker(...)