简体   繁体   English

我有“android.view.InflateException:二进制 XML 文件第 11 行:二进制 XML 文件第 11 行:膨胀 class 片段时出错”

[英]I have “android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class fragment”

I want to add google maps and the user can see the their location and the nearby vets.我想添加谷歌地图,用户可以看到他们的位置和附近的兽医。 But when i run the code i have "android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class fragment" error.但是当我运行代码时,我有“android.view.InflateException:二进制 XML 文件第 11 行:二进制 XML 文件第 11 行:膨胀 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 片段错误”。 How can i fix it??我该如何解决?

I added a map activity in my app.我在我的应用程序中添加了 map 活动。 The activity work successfully.活动顺利进行。 But it does not show location which i want to see.但它没有显示我想看到的位置。 For exampe when i choose the hospital anyting change.例如,当我选择医院任何变化时。 What is wrong in my code?我的代码有什么问题?

my MapActivity is:我的 MapActivity 是:

public class MapActivitiy extends AppCompatActivity {

    //views
    Spinner spType;
    Button btFind;
    SupportMapFragment supportMapFragment;
    GoogleMap map;
    FusedLocationProviderClient fusedLocationProviderClient;
    double currentLat = 0, currentLong = 0;

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

        //init views
        spType = findViewById(R.id.sp_type);
        btFind = findViewById(R.id.findBtn);
        supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_map);

        //yer çeşitlerinin arrayi
        final String[] placeTypeList = {"hospital", "vet", "atm"};
        //yer isimlerinin arrayi
        String[] placeNameList = {"Hospital", "Vet", "ATM"};

        //spinner'a adapteri ayarla
        spType.setAdapter(new ArrayAdapter<>(MapActivitiy.this, R.layout.support_simple_spinner_dropdown_item, placeNameList));

        //fused location provider client
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

        //izinleri kontrol et
        if (ActivityCompat.checkSelfPermission(MapActivitiy.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

            //izin verildiğinde, methodu çağır
            getCurrentLocation();

        }
        else {
            //izinler alınmadıysa, izin iste
            ActivityCompat.requestPermissions(MapActivitiy.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},44);

        }

        btFind.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Spinner'de seçilen pozisyonu al
                int i = spType.getSelectedItemPosition();
                //url
                String url = "https://maps.google.com/maps/api/place/nearbysearch/json?"+//url
                "location=" + currentLat + "," + currentLong + //enlem ve boylam
                "&radius=5000"+// yakınlık yarıçapı
                "&type="+ placeTypeList[i] + //gösterilecek yer tipleri
                "&sensor=true"+ //sensor
                "&key="+ getResources().getString(R.string.google_map_key); //Google map key

                //Json verilerini indirmek için place task methodunu çalıştır
                new PlaceTask().execute(url);

            }
        });




    }

    private void getCurrentLocation() {

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        Task<Location> task = fusedLocationProviderClient.getLastLocation();
        task.addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                //başarılıysa
                if (location != null){
                    //mevcut enlemi al
                    currentLat = location.getLatitude();
                    //mevcut boylamı al
                    currentLong = location.getLongitude();
                    //haritayı senkronize et
                    supportMapFragment.getMapAsync(new OnMapReadyCallback() {
                        @Override
                        public void onMapReady(GoogleMap googleMap) {
                            //harita hazır olduğu zaman
                            map = googleMap;
                            //haritadaki mevcut konumu yakınlaştır
                            map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(currentLat,currentLong),10));
                        }
                    });



                }
            }
        });


    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == 44){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED ){
                //izinler alındıysa, methodu cağır
                getCurrentLocation();
            }
        }
    }

    private class PlaceTask extends AsyncTask<String, Integer, String> {


        @Override
        protected String doInBackground(String... strings) {
            String data = null;
            try {
                //verilerin başlatılması
                 data = downloadUrl(strings[0]);
            } catch (IOException e) {
                e.printStackTrace();
            }

            return data;
        }

        @Override
        protected void onPostExecute(String s) {
            //parser task methodunu çalıştır
            new ParserTask().execute(s);
        }
    }

    private String downloadUrl(String string) throws IOException {
        //url in başlatılması
        URL url = new URL(string);
        //bağlantının başlatılması
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //bağlantının bağlanması
        connection.connect();
        //input stream başlatılması
        InputStream stream = connection.getInputStream();
        // buffer reader başlatılması
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
        //string builder başlatılması
        StringBuilder builder = new StringBuilder();
        //string değerlerinin başlatılması
        String line = "";

        while ((line = reader.readLine()) != null){
            //line ekle
            builder.append(line);
        }
        //append verisini al
        String data = builder.toString();
        //reader'i kapar
        reader.close();

        return  data;
    }

    private class ParserTask extends  AsyncTask<String, Integer, List<HashMap<String,String>>>  {
        @Override
        protected List<HashMap<String, String>> doInBackground(String... strings) {
            //json parser sınıfı oluştur
            JsonParser jsonParser = new JsonParser();
            //hashmap list başlatılması
            List<HashMap<String,String>> mapList = null;
            JSONObject object = null;
            try {
                //json objesi başlatılması
                object = new JSONObject(strings[0]);
                //parse(ayrıştırma) jsonObject
                mapList = jsonParser.parseResult(object);
            }
            catch (JSONException e){
                e.printStackTrace();
            }
            //return mapList
            return mapList;
        }

        @Override
        protected void onPostExecute(List<HashMap<String, String>> hashMaps) {
            //map'i temizle
            map.clear();

            for (int i = 0; i<hashMaps.size(); i++){
                //hashmap başlatılması
                HashMap<String,String> hashMapList = hashMaps.get(i);
                //Enlem al
                double lat = Double.parseDouble(hashMapList.get("lat"));
                //boylam al
                double lng = Double.parseDouble(hashMapList.get("lng"));
                //isim al
                String name = hashMapList.get("name");
                //enlem ve boylamı bağla
                LatLng latLng = new LatLng(lat,lng);
                // marker options başlatılması
                MarkerOptions options = new MarkerOptions();
                //enlem boylamın pozisyonunu ayarla
                options.position(latLng);
                //başlık oluştur
                options.title(name);
                //haritaya marker ekle
                map.addMarker(options);





            }
        }
    }
}

my jsonParser class is:我的 jsonParser class 是:

public class JsonParser {
    private HashMap<String,String> parseJsonObject(JSONObject object) {

        //Hashmap başlatılması
        HashMap<String,String> dataList = new HashMap<>();
        try {
            //objeden isim al
            String name = object.getString("name");
            //objeden enlem al
            String latitude = object.getJSONObject("geometry").getJSONObject("location").getString("lat");
            //objeden boylam al
            String longitude = object.getJSONObject("geometry").getJSONObject("location").getString("lng");

            //tüm verileri hashmap'e koy
            dataList.put("name", name);
            dataList.put("lat", latitude);
            dataList.put("lng", longitude);

        }
        catch (JSONException e){
            e.printStackTrace();
        }
        //return Hashmap
        return dataList;

    }

    private List<HashMap<String,String>> parseJsonArray(JSONArray jsonArray) {
        //HashmapList başlatılması
        List<HashMap<String,String>> dataList = new ArrayList<>();
        for (int i = 0; i<jsonArray.length(); i++){
            try {
                //hashmap başlatılması
                HashMap<String,String> data = parseJsonObject((JSONObject) jsonArray.get(i));
                //HashMap List'e verileri ekle
                dataList.add(data);

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

            }
        }
        //return HashMapList
        return dataList;
    }

    public List<HashMap<String,String>> parseResult(JSONObject object) {
        //Json array'in başlatılması
        JSONArray jsonArray = null;

        try {
            //results array'i al
            jsonArray = object.getJSONArray("results");
        }
        catch (JSONException e){
            e.printStackTrace();
        }
        //return array
        return parseJsonArray(jsonArray);

    }


}


The red lines:红线:

  Process: com.gamze.pawsbook, PID: 30879
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:354)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
        at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
        at org.json.JSONTokener.nextValue(JSONTokener.java:94)
        at org.json.JSONObject.<init>(JSONObject.java:159)
        at org.json.JSONObject.<init>(JSONObject.java:176)
        at com.gamze.pawsbook.MapActivitiy$ParserTask.doInBackground(MapActivitiy.java:225)
        at com.gamze.pawsbook.MapActivitiy$ParserTask.doInBackground(MapActivitiy.java:215)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 

Why i could not see the places???为什么我看不到这些地方??? please help me..请帮我..

The error is because you are using an onCreate method inside a FragmentActivity .该错误是因为您在FragmentActivity中使用了 onCreate 方法。 You should instead inflate it in the onCreateView method:您应该改为在 onCreateView 方法中对其进行膨胀:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    
    return inflater.inflate(R.layout.activity_maps, container, false);
}

Another way is to extend an activity instead of Fragment Activity, in that case you should change your public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{ //your code }另一种方法是扩展 Activity 而不是 Fragment Activity,在这种情况下,您应该更改您的public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{ //your code }

to public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{ //your code} public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{ //your code}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 android.view.InflateException:二进制XML文件第0行:二进制XML文件第0行:膨胀类片段时出错 - android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class fragment android.view.InflateException:二进制XML文件第7行:二进制XML文件第7行:夸大类片段的错误 - android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class fragment android.view.InflateException:二进制XML文件第11行:膨胀类ImageView的错误 - android.view.InflateException: Binary XML file line #11: Error inflating class ImageView Android调试错误android.view.InflateException:二进制XML文件第9行:夸大类片段的错误 - Android debugging error android.view.InflateException: Binary XML file line #9: Error inflating class fragment android.view.InflateException:二进制 XML 文件第 9 行:二进制 XML 文件第 9 行:错误膨胀类 - android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class android.view.InflateException:二进制 XML 文件第 2 行:二进制 XML1 文件第 2 行:错误充气 Z3501BB4F2AC9CDC80<unknown></unknown> - android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown> 引起:android.view.InflateException:二进制 XML 文件第 11 行:错误膨胀类 io.flutter.view.FlutterView - Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class io.flutter.view.FlutterView Android-android.view.InflateException:二进制XML文件第9行:膨胀类片段的错误 - Android - android.view.InflateException: Binary XML file line #9: Error inflating class fragment 错误:android.view.InflateException:二进制XML文件行#8:二进制XML文件行#8:错误膨胀类片段 - Error: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class fragment android.view.InflateException:二进制XML文件行#8:错误膨胀类片段 - android.view.InflateException: Binary XML file line #8: Error inflating class fragment
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM