Android Google Maps v2は、JSON配列phpmySQLからマップマーカーを追加します

etrex2k4

mySQLデータベースからGoogleMaps v2にマーカーを描画するAndroidアプリを作成しようとしていますが、機能しません。

Mapactivity.java

    public class MapsActivity extends FragmentActivity  {
    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();
    // url to get all products list
    private static String url_all_products = "http://127.0.0.1/get_marker.php";
    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_Coordinates = "products";
    private static final String TAG_PID = "pid";
    private static final String TAG_X = "x_coordinate";
    private static final String TAG_Y = "y_coordinate";
    // products JSONArray
    JSONArray products = null;
    private GoogleMap mMap; // Might be null if Google Play services APK is not available.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        setUpMapIfNeeded();
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }
    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.

            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {



                // Add marker info window click listener
              //  mMap.setOnInfoWindowClickListener(this);
                //Zooming Buttons
                UiSettings mapSettings;
                mapSettings = mMap.getUiSettings();
                mapSettings.setZoomControlsEnabled(true);
                //Zooming Buttons


                GetMarker();
            }
        }
    }
    private void GetMarker()
    {
        mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        mMap.setMyLocationEnabled(true);
        double xi = 49.999065;
        double yi = 8.273978;

        LatLng MUSEUM = new LatLng(xi , yi);
        Marker museum = mMap.addMarker(new MarkerOptions()
                .position(MUSEUM)
                .title("Mainzer Dom")
                .snippet("Der Mainzer Dom"));


        new Thread(new Runnable() {
            public void run() {
                retrieveAndAddCities();
            }
        }).start();

    }

    private void retrieveAndAddCities()  {

        List params = new ArrayList();
        // getting JSON string from URL
        JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

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

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

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

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

                    // Storing each json item in variable
                    int id = c.getInt(TAG_PID);
                    double x_coordinate = c.getDouble(TAG_X);
                    double y_coordinate = c.getDouble(TAG_Y);
                    mMap.addMarker(new MarkerOptions()
                            .position(new LatLng(x_coordinate,y_coordinate )));
                }

            } else {


            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

}

そして私のphpコード:get_marker.php

    <?php

/*
 * Following code will list all the products
 */


$response = array();


require_once __DIR__ . '/db_connect.php';


$db = new DB_CONNECT();


$result = mysql_query("SELECT *FROM products") or die(mysql_error());


if (mysql_num_rows($result) > 0) {

    $response["products"] = array();

    while ($row = mysql_fetch_array($result)) {

        $product = array();
        $product["pid"] = $row["pid"];
        $product["x_coordinate"] = $row["x_coordinate"];
        $product["y_coordinate"] = $row["y_coordinate"];
        $product["created_at"] = $row["created_at"];
        $product["updated_at"] = $row["updated_at"];


        array_push($response["products"], $product);
    }

    $response["success"] = 1;

    // echoing JSON response
    echo json_encode($response);
} else {

    $response["success"] = 0;
    $response["message"] = "No products found";


    echo json_encode($response);
}
?>

これはJsonParserです

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
                                      List<NameValuePair> params) {

        // Making HTTP request
        try {

            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

私がretrieveAndAddCities();を開始しようとすると

new Thread(new Runnable() {
            public void run() {
                retrieveAndAddCities();
            }
        }).start();

アプリがクラッシュします。

誰かが私を助けてくれることを願っています。どうもありがとう

編集:Logcat:

04-06 01:50:04.268    5153-5168/flo.myapplication D/OpenGLRenderer﹕ Render dirty regions requested: true
04-06 01:50:04.271    5153-5153/flo.myapplication D/﹕ HostConnection::get() New Host Connection established 0xae0d8560, tid 5153
04-06 01:50:04.304    5153-5153/flo.myapplication D/Atlas﹕ Validating map...
04-06 01:50:04.364    5153-5168/flo.myapplication D/﹕ HostConnection::get() New Host Connection established 0xae0d8ae0, tid 5168
04-06 01:50:04.373    5153-5168/flo.myapplication I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-06 01:50:04.446    5153-5168/flo.myapplication D/OpenGLRenderer﹕ Enabling debug mode 0
04-06 01:50:04.465    5153-5168/flo.myapplication W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-06 01:50:04.465    5153-5168/flo.myapplication W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa605e2c0, error=EGL_SUCCESS
04-06 01:50:11.068    5153-5153/flo.myapplication I/zzx﹕ Making Creator dynamically
04-06 01:50:11.071    5153-5153/flo.myapplication W/ResourcesManager﹕ Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
04-06 01:50:11.071    5153-5153/flo.myapplication W/ResourcesManager﹕ Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
04-06 01:50:11.088    5153-5153/flo.myapplication I/Google Maps Android API﹕ Google Play services client version: 7095000
04-06 01:50:11.092    5153-5153/flo.myapplication I/Google Maps Android API﹕ Google Play services package version: 7097470
04-06 01:50:11.205    5153-5165/flo.myapplication I/art﹕ Background partial concurrent mark sweep GC freed 11075(592KB) AllocSpace objects, 0(0B) LOS objects, 38% free, 6MB/10MB, paused 5.446ms total 25.641ms
04-06 01:50:11.363    5153-5165/flo.myapplication I/art﹕ Background sticky concurrent mark sweep GC freed 49928(2039KB) AllocSpace objects, 3(561KB) LOS objects, 0% free, 11MB/11MB, paused 2.593ms total 119.732ms
04-06 01:50:11.423    5153-5165/flo.myapplication I/art﹕ Background partial concurrent mark sweep GC freed 12702(547KB) AllocSpace objects, 2(1015KB) LOS objects, 28% free, 10MB/14MB, paused 5.173ms total 52.148ms
04-06 01:50:11.551    5153-5153/flo.myapplication I/Choreographer﹕ Skipped 31 frames!  The application may be doing too much work on its main thread.
04-06 01:50:11.608    5153-5168/flo.myapplication W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-06 01:50:11.608    5153-5168/flo.myapplication W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa602e720, error=EGL_SUCCESS
04-06 01:50:11.648    5153-5185/flo.myapplication D/﹕ HostConnection::get() New Host Connection established 0xa5491d90, tid 5185
04-06 01:50:11.657    5153-5186/flo.myapplication D/All Products:﹕ {"products":[{"pid":"1","x_coordinate":"50","y_coordinate":"8","created_at":"2015-04-06 01:13:22","updated_at":"0000-00-00 00:00:00"}],"success":1}
04-06 01:50:11.657    5153-5186/flo.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-378
    Process: flo.myapplication, PID: 5153
    java.lang.IllegalStateException: Not on the main thread
            at com.google.l.a.cd.b(Unknown Source)
            at com.google.maps.api.android.lib6.c.ca.a(Unknown Source)
            at com.google.maps.api.android.lib6.c.el.a(Unknown Source)
            at com.google.android.gms.maps.internal.l.onTransact(SourceFile:167)
            at android.os.Binder.transact(Binder.java:380)
            at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source)
            at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
            at flo.myapplication.MapsActivity.retrieveAndAddCities(MapsActivity.java:201)
            at flo.myapplication.MapsActivity.access$000(MapsActivity.java:98)
            at flo.myapplication.MapsActivity$1.run(MapsActivity.java:168)
            at java.lang.Thread.run(Thread.java:818)

さて、今AsyncTaskでコードを変更しましたが、エラーも発生します

package flo.myapplication;

import android.os.StrictMode;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.View;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Dialog;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MapsActivity extends FragmentActivity  {
    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();
    // url to get all products list
    private static String url_all_products = "http://88.198.46.8/get_marker.php";
    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_Coordinates = "products";
    private static final String TAG_PID = "pid";
    private static final String TAG_X = "x_coordinate";
    private static final String TAG_Y = "y_coordinate";
    // products JSONArray
    JSONArray products = null;
    private GoogleMap mMap; // Might be null if Google Play services APK is not available.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        setUpMapIfNeeded();
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }
    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.

            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {



                // Add marker info window click listener
              //  mMap.setOnInfoWindowClickListener(this);
                //Zooming Buttons
                UiSettings mapSettings;
                mapSettings = mMap.getUiSettings();
                mapSettings.setZoomControlsEnabled(true);
                //Zooming Buttons


                GetMarker();
            }
        }
    }
    private void GetMarker()
    {
        mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        mMap.setMyLocationEnabled(true);
        double xi = 49.999065;
        double yi = 8.273978;

        LatLng MUSEUM = new LatLng(xi , yi);
        Marker museum = mMap.addMarker(new MarkerOptions()
                .position(MUSEUM)
                .title("Mainzer Dom")
                .snippet("Der Mainzer Dom"));


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





    }

    class retrieveAndAddCities extends AsyncTask<String, String, String> {
        protected String doInBackground(String... args) {
            List params = new ArrayList();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

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

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

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

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

                        // Storing each json item in variable
                        int id = c.getInt(TAG_PID);
                        double x_coordinate = c.getDouble(TAG_X);
                        double y_coordinate = c.getDouble(TAG_Y);
                        mMap.addMarker(new MarkerOptions()
                                .position(new LatLng(x_coordinate,y_coordinate )));
                    }

                } else {


                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

    }



}

およびLogcatファイル:

04-06 02:29:30.055    5324-5339/flo.myapplication D/OpenGLRenderer﹕ Render dirty regions requested: true
04-06 02:29:30.076    5324-5324/flo.myapplication D/﹕ HostConnection::get() New Host Connection established 0xae0d5550, tid 5324
04-06 02:29:30.129    5324-5324/flo.myapplication D/Atlas﹕ Validating map...
04-06 02:29:30.274    5324-5339/flo.myapplication D/﹕ HostConnection::get() New Host Connection established 0xae0d59a0, tid 5339
04-06 02:29:30.397    5324-5339/flo.myapplication I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-06 02:29:30.574    5324-5339/flo.myapplication D/OpenGLRenderer﹕ Enabling debug mode 0
04-06 02:29:30.693    5324-5339/flo.myapplication W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-06 02:29:30.693    5324-5339/flo.myapplication W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa604a400, error=EGL_SUCCESS
04-06 02:29:30.788    5324-5324/flo.myapplication I/Choreographer﹕ Skipped 37 frames!  The application may be doing too much work on its main thread.
04-06 02:29:37.319    5324-5324/flo.myapplication I/zzx﹕ Making Creator dynamically
04-06 02:29:37.321    5324-5324/flo.myapplication W/ResourcesManager﹕ Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
04-06 02:29:37.321    5324-5324/flo.myapplication W/ResourcesManager﹕ Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
04-06 02:29:37.336    5324-5324/flo.myapplication I/Google Maps Android API﹕ Google Play services client version: 7095000
04-06 02:29:37.361    5324-5324/flo.myapplication I/Google Maps Android API﹕ Google Play services package version: 7097470
04-06 02:29:37.396    5324-5336/flo.myapplication I/art﹕ Background sticky concurrent mark sweep GC freed 0(0B) AllocSpace objects, 0(0B) LOS objects, 1% free, 2MB/2MB, paused 5.461ms total 9.101ms
04-06 02:29:37.582    5324-5336/flo.myapplication I/art﹕ Background partial concurrent mark sweep GC freed 45498(2MB) AllocSpace objects, 11(2MB) LOS objects, 29% free, 9MB/13MB, paused 999us total 105.746ms
04-06 02:29:37.835    5324-5324/flo.myapplication I/Choreographer﹕ Skipped 32 frames!  The application may be doing too much work on its main thread.
04-06 02:29:37.924    5324-5339/flo.myapplication W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-06 02:29:37.924    5324-5339/flo.myapplication W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6078180, error=EGL_SUCCESS
04-06 02:29:37.977    5324-5358/flo.myapplication D/All Products:﹕ {"products":[{"pid":"1","x_coordinate":"50","y_coordinate":"8","created_at":"2015-04-06 01:13:22","updated_at":"0000-00-00 00:00:00"}],"success":1}
04-06 02:29:37.978    5324-5358/flo.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: flo.myapplication, PID: 5324
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.IllegalStateException: Not on the main thread
            at com.google.l.a.cd.b(Unknown Source)
            at com.google.maps.api.android.lib6.c.ca.a(Unknown Source)
            at com.google.maps.api.android.lib6.c.el.a(Unknown Source)
            at com.google.android.gms.maps.internal.l.onTransact(SourceFile:167)
            at android.os.Binder.transact(Binder.java:380)
            at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source)
            at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
            at flo.myapplication.MapsActivity$retrieveAndAddCities.doInBackground(MapsActivity.java:200)
            at flo.myapplication.MapsActivity$retrieveAndAddCities.doInBackground(MapsActivity.java:174)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
04-06 02:29:38.024    5324-5357/flo.myapplication D/﹕ HostConnection::get() New Host Connection established 0x9fbe30a0, tid 5357
04-06 02:29:38.833    5324-5336/flo.myapplication I/art﹕ Background partial concurrent mark sweep GC freed 10277(451KB) AllocSpace objects, 32(1505KB) LOS objects, 23% free, 13MB/17MB, paused 795us total 118.120ms
トムパーマー

メインスレッドからUIを更新しようとしているため、アプリがクラッシュしています。JSONリクエストは成功しましたが、コードがmMap.addMarker()にヒットすると、アプリがクラッシュします。

http://developer.android.com/guide/components/processes-and-threads.html

AsyncTaskを使用することは良い考えですが、doInBackgroundはメインスレッドで実行されず、アプリは現在と同じようにクラッシュするため、doInBackground()でJSONリクエストを実行するだけで済みます。AsyncTaskを使用する場合は、ドキュメントをご覧ください。グーグルはかなり良い例を持っています。

http://developer.android.com/reference/android/os/AsyncTask.html

正しく機能するようにretrieveAndAddCitiesクラスを変更しました。doInBackgroundは、製品のJSONArrayを返すようになりました。doInBackgroundが完了すると、製品のJSONArrayがonPostExecuteのパラメーターとして渡されます。onPostExecuteはメインスレッドで実行されます。これで、製品をループしてマップマーカーを追加するforループが含まれるようになりました。

class retrieveAndAddCities extends AsyncTask< Void, Void, JSONArray > {
    protected JSONArray doInBackground(Void... args) {
        List params = new ArrayList();
        // getting JSON string from URL
        JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

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

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

            if (success == 1) {
                // products found
                // Getting Array of Products
                return json.getJSONArray(TAG_Coordinates);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(JSONArray products) {
        if (products != null) {
            for (int i = 0; i < products.length(); i++) {
                JSONObject c = null;
                try {
                    c = products.getJSONObject(i);
                    // Storing each json item in variable
                    int id = c.getInt(TAG_PID);
                    double x_coordinate = c.getDouble(TAG_X);
                    double y_coordinate = c.getDouble(TAG_Y);
                    mMap.addMarker(new MarkerOptions()
                            .position(new LatLng(x_coordinate, y_coordinate)));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        } else {
            //Handle case of no products or failure
        }
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Google Maps Android API v2

分類Dev

Google android maps api v2マーカータイトルを常に表示

分類Dev

Google Maps API v2Androidに複数のマーカーを追加する

分類Dev

Google Maps v2 でマップ マーカー ID を取得する

分類Dev

Google Maps V2 Androidでマーカーのアイコンのサイズを指定する方法

分類Dev

Google Maps V2 Androidでマーカーのアイコンのサイズを指定する方法

分類Dev

Google Maps V2 Androidでマーカーのアイコンのサイズを指定する方法

分類Dev

Parse JSON response for Google Maps Marker in Android

分類Dev

Android Google Maps v2:マーカーサイズをアニメーション化

分類Dev

Google Maps API v2:マーカーのツールチップをクリック可能にする方法は?

分類Dev

mysqlデータベースから座標の配列を取得し、AndroidのGoogleマップにマーカーとして追加します

分類Dev

Google Maps Android API v2 Authorization failure

分類Dev

Can't connect to Google Maps Api Android V2

分類Dev

Overlay an image on google maps android api v2

分類Dev

Google Maps Activity V2 Android Studio

分類Dev

「Google Maps Android API v2」が有効になっていることを確認します。Googleマップを実装しようとすると、このエラーが発生します

分類Dev

Google Maps Android API v2のMapFragmentにカスタムコントロールを追加する方法

分類Dev

マーカーをクリックしてURLを開く(Google Maps Android)

分類Dev

Google Maps Android APIv2のテキストを含むマップマーカー

分類Dev

android google maps not loading the map

分類Dev

Android Google Maps SnapshotReadyCallback error

分類Dev

Android SDK Eclipse Google Maps

分類Dev

Using Google Maps with Xamarin Android

分類Dev

Android_Googleマップv2でマーカーの位置を取得してLatlngの配列に合わせる方法

分類Dev

Android Google Maps API v2:方位位置を取得する

分類Dev

Google Maps API v2:マーカーをクリック可能にする方法は?

分類Dev

Google Maps Android APIv2ズームレベルでマーカーを表示

分類Dev

Google Maps Android Clustering OnCameraChangeListener()は非推奨

分類Dev

Google Maps V2-Android-現在のズームレベルを取得します

Related 関連記事

  1. 1

    Google Maps Android API v2

  2. 2

    Google android maps api v2マーカータイトルを常に表示

  3. 3

    Google Maps API v2Androidに複数のマーカーを追加する

  4. 4

    Google Maps v2 でマップ マーカー ID を取得する

  5. 5

    Google Maps V2 Androidでマーカーのアイコンのサイズを指定する方法

  6. 6

    Google Maps V2 Androidでマーカーのアイコンのサイズを指定する方法

  7. 7

    Google Maps V2 Androidでマーカーのアイコンのサイズを指定する方法

  8. 8

    Parse JSON response for Google Maps Marker in Android

  9. 9

    Android Google Maps v2:マーカーサイズをアニメーション化

  10. 10

    Google Maps API v2:マーカーのツールチップをクリック可能にする方法は?

  11. 11

    mysqlデータベースから座標の配列を取得し、AndroidのGoogleマップにマーカーとして追加します

  12. 12

    Google Maps Android API v2 Authorization failure

  13. 13

    Can't connect to Google Maps Api Android V2

  14. 14

    Overlay an image on google maps android api v2

  15. 15

    Google Maps Activity V2 Android Studio

  16. 16

    「Google Maps Android API v2」が有効になっていることを確認します。Googleマップを実装しようとすると、このエラーが発生します

  17. 17

    Google Maps Android API v2のMapFragmentにカスタムコントロールを追加する方法

  18. 18

    マーカーをクリックしてURLを開く(Google Maps Android)

  19. 19

    Google Maps Android APIv2のテキストを含むマップマーカー

  20. 20

    android google maps not loading the map

  21. 21

    Android Google Maps SnapshotReadyCallback error

  22. 22

    Android SDK Eclipse Google Maps

  23. 23

    Using Google Maps with Xamarin Android

  24. 24

    Android_Googleマップv2でマーカーの位置を取得してLatlngの配列に合わせる方法

  25. 25

    Android Google Maps API v2:方位位置を取得する

  26. 26

    Google Maps API v2:マーカーをクリック可能にする方法は?

  27. 27

    Google Maps Android APIv2ズームレベルでマーカーを表示

  28. 28

    Google Maps Android Clustering OnCameraChangeListener()は非推奨

  29. 29

    Google Maps V2-Android-現在のズームレベルを取得します

ホットタグ

アーカイブ