Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Android 在google地图上添加标记时崩溃_Android_Google Maps_Android Studio - Fatal编程技术网

Android 在google地图上添加标记时崩溃

Android 在google地图上添加标记时崩溃,android,google-maps,android-studio,Android,Google Maps,Android Studio,我有这个方法: class getuser extends AsyncTask<String, String, String> { protected String doInBackground(String... args) { int success; try { List<NameValuePair> params = new ArrayList<NameValuePair>(

我有这个方法:

       class getuser extends AsyncTask<String, String, String> {
    protected String doInBackground(String... args) {
        int success;
        try {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("ID", ID));
            JSONObject json = jsonParser.makeHttpRequest(url_user_detials, "GET", params);
            Log.d("Single user Details", json.toString());
            success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                JSONArray userObj = json.getJSONArray("user");
                JSONObject user = userObj.getJSONObject(0);
                String ln = user.getString("longg");
                String lt = user.getString("latt");
                String fn = user.getString("fname");
                String lna = user.getString("lname");
                String ph = user.getString("phone");

                username=fn+" "+lna;
                userphone=ph+"";
                userlat= Double.parseDouble(lt);
                userlong= Double.parseDouble(ln);

                marker = new MarkerOptions().position(new LatLng(userlat, userlong));
                marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));
                map.addMarker(marker);
            } else {
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
我看不出有什么问题吗

我得到的错误是:

      04-25 20:22:55.330 24534-29164/com.example.hatim.maps D/Single user Details: {"success":1,"user":[{"ID":"1223456789","fname":"lama","lname":"tat","phone":"2587598","longg":"46.739004409794056","latt":"24.729458546415405"}]}
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime: Process: com.example.hatim.maps, PID: 24534
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:309)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:  Caused by: java.lang.IllegalStateException: Not on the main thread
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at maps.ce.i.b(Unknown Source)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at maps.db.c.a(Unknown Source)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at maps.ei.bu.a(Unknown Source)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at com.google.android.gms.maps.internal.e$a.onTransact(:com.google.android.gms.alldynamite:167)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at android.os.Binder.transact(Binder.java:387)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at com.example.hatim.maps.SearchResutl$getuser.doInBackground(SearchResutl.java:181)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at com.example.hatim.maps.SearchResutl$getuser.doInBackground(SearchResutl.java:156)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
      04-25 20:22:55.350 24534-29164/com.example.hatim.maps E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 

有人能帮我解决这个问题吗?提前感谢。

您不能从后台线程更新UI。要更新UI或向映射添加标记,请使用onPostExecute方法。你也可以使用

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // your UI updation
            }
        });
您正在使用AsyncTask,然后在onPostExecute方法中更新UI

class getuser extends AsyncTask<String, String, LatLng> {

        @Override
        protected LatLng doInBackground(String... strings) {
            int success;
            try {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("ID", ID));
                JSONObject json = jsonParser.makeHttpRequest(url_user_detials, "GET", params);
                Log.d("Single user Details", json.toString());
                success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    JSONArray userObj = json.getJSONArray("user");
                    JSONObject user = userObj.getJSONObject(0);
                    String ln = user.getString("longg");
                    String lt = user.getString("latt");
                    String fn = user.getString("fname");
                    String lna = user.getString("lname");
                    String ph = user.getString("phone");

                    username=fn+" "+lna;
                    userphone=ph+"";
                    userlat= Double.parseDouble(lt);
                    userlong= Double.parseDouble(ln);

                    return new LatLng(userlat, userlong);

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

        @Override
        protected void onPostExecute(LatLng latLng) {
           if(latLng != null){
               marker = new MarkerOptions().position(latLng);
               marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));
               map.addMarker(marker);
           }


        }
    }
class getuser扩展异步任务{
@凌驾
受保护的板条箱(串…串){
成功;
试一试{
List params=new ArrayList();
参数add(新的BasicNameValuePair(“ID”,ID));
JSONObject json=jsonParser.makeHttpRequest(url\u user\u detials,“GET”,params);
Log.d(“单用户详细信息”,json.toString());
success=json.getInt(TAG_success);
如果(成功==1){
JSONArray userObj=json.getJSONArray(“用户”);
JSONObject user=userObj.getJSONObject(0);
String ln=user.getString(“long”);
字符串lt=user.getString(“latt”);
String fn=user.getString(“fname”);
String lna=user.getString(“lname”);
String ph=user.getString(“电话”);
用户名=fn+“”+lna;
userphone=ph+“”;
userlat=Double.parseDouble(lt);
userlong=Double.parseDouble(ln);
返回新的LatLng(userlat,userlong);
}否则{
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
@凌驾
后期执行时受保护的无效(LatLng LatLng){
如果(latLng!=null){
标记=新标记选项().位置(板条);
icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));
map.addMarker(marker);
}
}
}

如果我的答案对您有效,请接受。
class getuser extends AsyncTask<String, String, LatLng> {

        @Override
        protected LatLng doInBackground(String... strings) {
            int success;
            try {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("ID", ID));
                JSONObject json = jsonParser.makeHttpRequest(url_user_detials, "GET", params);
                Log.d("Single user Details", json.toString());
                success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    JSONArray userObj = json.getJSONArray("user");
                    JSONObject user = userObj.getJSONObject(0);
                    String ln = user.getString("longg");
                    String lt = user.getString("latt");
                    String fn = user.getString("fname");
                    String lna = user.getString("lname");
                    String ph = user.getString("phone");

                    username=fn+" "+lna;
                    userphone=ph+"";
                    userlat= Double.parseDouble(lt);
                    userlong= Double.parseDouble(ln);

                    return new LatLng(userlat, userlong);

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

        @Override
        protected void onPostExecute(LatLng latLng) {
           if(latLng != null){
               marker = new MarkerOptions().position(latLng);
               marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));
               map.addMarker(marker);
           }


        }
    }