android StackOverflower错误

o4tp2gmn  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(409)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

5年前关门了。
改进这个问题
活动开始时,某些设备上出现下一个奇怪的stackoverflow错误:

04-28 14:55:56.717: E/AndroidRuntime(4345): FATAL EXCEPTION: main
04-28 14:55:56.717: E/AndroidRuntime(4345): java.lang.StackOverflowError
04-28 14:55:56.717: E/AndroidRuntime(4345): at java.lang.ref.FinalizerReference.add(FinalizerReference.java:48)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.XmlBlock$Parser.<init>(XmlBlock.java:78)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.XmlBlock.newParser(XmlBlock.java:71)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2126)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1918)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.getDrawable(Resources.java:663)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:890)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
04-28 14:55:56.717: E/AndroidRuntime(4345):     at android.content.res.Resources.loadDrawable(Resources.java:1920
04-28 14:55:56.737: W/ActivityManager(440):   Force finishing activity com.devpocket.kvartirka/.OfferInfo
04-28 14:55:56.737: W/ActivityManager(440):   Force finishing activity com.devpocket.kvartirka/.MainActivity
04-28 14:55:57.237: W/ActivityManager(440): Activity pause timeout for ActivityRecord{417ca5f8 com.devpocket.kvartirka/.OfferInfo}

起初我以为问题出在googleplay服务上,但现在我找不到问题出在哪里。我还提供了我的活动代码:

public class OfferInfo extends ActionBarActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;

private TextView address;
private TextView flatTypeTV;
private TextView firstPrice;
private TextView secondPrice;
private TextView thirdPrice;
private TextView metroText;
private ImageView offerImage;

private String contactNumber;
private String skypeName;
private String userID;
private String lat, lng;
private String flatAddress;
private String flatID;
private int flatsCount;

private ArrayList<String> imageGallery = new ArrayList<String>();

private GoogleMap googleMap;

private WebView webView;

private CityData cityData;
private String ownerID = "";
private String ownerName = "";

private GoogleApiClient mGoogleApiClient;

private boolean mResolvingError = false;

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

    ImageView back = (ImageView) findViewById(R.id.backButton);
    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
            finish();
        }
    });

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    cityData = getIntent().getParcelableExtra("DATA");
    String currency = intent.getStringExtra("currencyID");

    if(extras.containsKey("ownerID")) {
        ownerID = intent.getStringExtra("ownerID");
    }

    lat = cityData.getLat();
    lng = cityData.getLng();

    Button showDialog = (Button) findViewById(R.id.showDialog);
    webView = (WebView) findViewById(R.id.webView);

    LinearLayout metroInfo = (LinearLayout) findViewById(R.id.metroInfo);

    JsonParser parser = new JsonParser();
    flatAddress = cityData.getAddress();
    flatID = cityData.getFlatID();
    String imageURL = cityData.getURL();

    JsonArray jsonArray = (JsonArray)parser.parse(cityData.getPhotosArray());

    JsonObject contacts = (JsonObject)parser.parse(cityData.getContacts());
    userID = contacts.getAsJsonPrimitive("id").getAsString();
    ownerName = contacts.getAsJsonPrimitive("name").getAsString();
    contactNumber = contacts.getAsJsonPrimitive("phone_normalized_1").getAsString();
    skypeName = contacts.getAsJsonPrimitive("skype").getAsString();
    flatsCount = contacts.getAsJsonPrimitive("flats_count").getAsInt();

    String photoURL;

    for(int i = 0; i < jsonArray.size(); i++) {
        photoURL = jsonArray.get(i).getAsString();
        imageGallery.add(i, photoURL);
    }

    offerImage = (ImageView) findViewById(R.id.offerImage);
    final ImageView imageTop = (ImageView) findViewById(R.id.imageTop);

    Ion.with(imageTop)
            .fitXY()
            .load("http:" + imageURL);

    Ion.with(offerImage)
            .fitXY()
            .load("http:" + imageURL);

    ObservableScrollView scrollView = (ObservableScrollView) findViewById(R.id.scrollView);
    offerImage.getHeight();

    ImageView photoButton = (ImageView) findViewById(R.id.photoButton);

    final RelativeLayout topLayout = (RelativeLayout) findViewById(R.id.topLayout);

    scrollView.setScrollViewCallbacks(new ObservableScrollViewCallbacks() {

        @Override
        public void onScrollChanged(int i, boolean b, boolean b1) {
            if (i > offerImage.getHeight()-topLayout.getHeight()) {
                imageTop.setVisibility(View.VISIBLE);
            } else if(i < offerImage.getHeight()) {
                imageTop.setVisibility(View.GONE);
            }

        }

        @Override
        public void onDownMotionEvent() {

        }

        @Override
        public void onUpOrCancelMotionEvent(ScrollState scrollState) {

        }
    });

    LinearLayout nightPricesLayout = (LinearLayout) findViewById(R.id.nightPricesLayout);
    if("0".equals(cityData.getNightPrice())) {
        nightPricesLayout.setVisibility(View.GONE);
    }
    LinearLayout hourPricesLayout = (LinearLayout) findViewById(R.id.hourPricesLayout);
    if("0".equals(cityData.getHourPrice())) {
        hourPricesLayout.setVisibility(View.GONE);
    }

    String metro = cityData.getMetro();
    metroText = (TextView) findViewById(R.id.metroText);
    if (TextUtils.isEmpty(metro)) {
        metroInfo.setVisibility(View.GONE);
    } else {
        metroText.setText(metro);
    }
    address = (TextView) findViewById(R.id.addressflatTV);
    address.setText(flatAddress);
    flatTypeTV = (TextView) findViewById(R.id.flatTypeTV);
    flatTypeTV.setText(cityData.getTitle());
    firstPrice = (TextView) findViewById(R.id.firstPrice);
    secondPrice = (TextView) findViewById(R.id.secondPrice);
    thirdPrice = (TextView) findViewById(R.id.thirdPrice);

    if("643".equals(currency)) {
        CharSequence firstText = spanWithRoubleTypeface(cityData.getDayPrice() + "₽");
        firstPrice.setText(firstText);
        CharSequence secondText = spanWithRoubleTypeface(cityData.getNightPrice() + "₽");
        secondPrice.setText(secondText);
        CharSequence thirdText = spanWithRoubleTypeface(cityData.getHourPrice() + "₽");
        thirdPrice.setText(thirdText);
    } else if("398".equals(currency)) {
        firstPrice.setText(cityData.getDayPrice()+"\u20B8");
        secondPrice.setText(cityData.getNightPrice()+"\u20B8");
        thirdPrice.setText(cityData.getHourPrice()+"\u20B8");
    }  else if("980".equals(currency)) {
        firstPrice.setText(cityData.getDayPrice()+"\u20B4");
        secondPrice.setText(cityData.getNightPrice()+"\u20B4");
        thirdPrice.setText(cityData.getHourPrice()+"\u20B4");
    } else {
        firstPrice.setText(cityData.getDayPrice());
        secondPrice.setText(cityData.getNightPrice());
        thirdPrice.setText(cityData.getHourPrice());
    }

    offerImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(OfferInfo.this, GalleryActivity.class);
            intent.putStringArrayListExtra("IMAGES", imageGallery);
            startActivity(intent);
        }
    });

    String descriptionFull = cityData.getDescription_full();
    descriptionFull = descriptionFull.replace("<ul>", "");
    descriptionFull = descriptionFull.replace("</ul>", "");
    descriptionFull = descriptionFull.replace("<li>", "");
    descriptionFull = descriptionFull.replace("</li>", "<br />");
    showInWebView(descriptionFull);
    photoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(OfferInfo.this, PhotoActivity.class);
            intent.putExtra("lat", lat);
            intent.putExtra("lng", lng);
            intent.putExtra("Address", flatAddress);
            startActivity(intent);
        }
    });
}

@Override
protected void onResume() {
    super.onResume();

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if(resultCode == 0) {
        initializeMap();
    } else {
        Crashlytics.setString("GoogleMap", "Map isn't available, but i'm falling");
        Toast.makeText(this, "Ошибка Google Play Services", Toast.LENGTH_LONG).show();
    }

}

private void initializeMap() {

        if (googleMap == null) {

            final LatLng offerPosition = new LatLng(Double.parseDouble(lat), Double.parseDouble(lng));
            googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
                    R.id.map)).getMap();
            Marker marker;
            marker = googleMap.addMarker(new MarkerOptions().position(offerPosition));
            marker.setIcon(BitmapDescriptorFactory.defaultMarker(220.0f));

            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(offerPosition, 13));
            googleMap.getUiSettings().setScrollGesturesEnabled(false);
            googleMap.getUiSettings().setMapToolbarEnabled(false);
            googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                @Override
                public boolean onMarkerClick(Marker marker) {
                    Intent intent = new Intent(OfferInfo.this, MapActivity.class);
                    intent.putExtra("lat", lat);
                    intent.putExtra("lng", lng);
                    intent.putExtra("address", flatAddress);
                    intent.putExtra("rooms", cityData.getRoomNumbers());
                    startActivity(intent);
                    return false;
                }
            });
            googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
                @Override
                public void onMapClick(LatLng latLng) {
                    Intent intent = new Intent(OfferInfo.this, MapActivity.class);
                    intent.putExtra("address", flatAddress);
                    intent.putExtra("rooms", cityData.getRoomNumbers());
                    intent.putExtra("lat", lat);
                    intent.putExtra("lng", lng);
                    startActivity(intent);
                }
            });

        }
}

public void showInWebView(String data) {

    webView.loadDataWithBaseURL("", "<html> <style> h3 {margin-bottom:2}</style> <body>" + data + "</body></html>", "text/html", "UTF-8", "");

}

public void showDialog(View v) {

    DialogFragment newFragment = new ContactsDialog();
    Bundle args = new Bundle();
    args.putString("ownerID", ownerID);
    args.putInt("flatsCount", flatsCount);
    args.putString("contactNumber", contactNumber);
    if (!ownerID.equals(userID)) {
        args.putString("userID", userID);
        args.putString("ownerName", ownerName);
    }
    if (skypeName.length() > 0)
        args.putString("skypeName", skypeName);

    newFragment.setArguments(args);
    newFragment.show(this.getFragmentManager(), "missiles");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_offer_info, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.actionPhoto) {
        Intent intent = new Intent(OfferInfo.this, PhotoActivity.class);
        intent.putExtra("lat", lat);
        intent.putExtra("lng", lng);
        intent.putExtra("Address", flatAddress);
        startActivity(intent);
        return true;
    } else if(item.getItemId() == R.id.home) {

        onBackPressed();
        finish();

    } else if(item.getItemId() == R.id.homeAsUp) {

        onBackPressed();
        finish();

    } else if (item.getItemId() == android.R.id.home) {

        onBackPressed();
        finish();
    }

    return super.onOptionsItemSelected(item);
}

private CharSequence spanWithRoubleTypeface(String priceHint) {
    final Typeface roubleSupportedTypeface =
            Typeface.createFromAsset(getAssets(), "fonts/rouble2.ttf");

    SpannableStringBuilder resultSpan = new SpannableStringBuilder(priceHint);
    for (int i = 0; i < resultSpan.length(); i++) {
        if (resultSpan.charAt(i) == '\u20BD') {
            TypefaceSpan2 roubleTypefaceSpan = new TypefaceSpan2(roubleSupportedTypeface);
            resultSpan.setSpan(roubleTypefaceSpan, i, i + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
    return resultSpan;
}

@Override
public void onConnected(Bundle bundle) {

    try {
        initializeMap();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    if (mResolvingError) {
        return;
    } else if (connectionResult.hasResolution()) {
        try {
            mResolvingError = true;
            connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
        } catch (IntentSender.SendIntentException e) {
            mGoogleApiClient.connect();
        }
    } else {
        Toast.makeText(OfferInfo.this, "Обновите Google Play Service", Toast.LENGTH_LONG).show();
        mResolvingError = true;
    }
}
}
f4t66c6m

f4t66c6m1#

你有一个 StateListDrawable i、 e.可抽出式 selector 资源似乎引用自身,因此膨胀时会导致无限递归。

yhqotfr8

yhqotfr82#

你在某处有一个无限循环。您应该研究循环或递归函数。

hfsqlsce

hfsqlsce3#

这可能是一个简单的记忆问题。这是旧设备吗?我的一个旧设备也有同样的问题,只是你需要降低内存消耗并检查你在使用什么资源。很难说,你应该调试你的代码,看看哪里失败了。堆栈溢出可能是由递归代码引起的,但这仅仅意味着没有足够的空间。
在android上,视图层次结构的深度也有限制,这可能会导致问题。我没有检查你的代码,但你应该检查你有多少水平。请参见:
android ui线程栈的大小限制是什么?如何克服它?

相关问题