gpt4 book ai didi

java - Android 堆栈溢出错误

转载 作者:行者123 更新时间:2023-12-01 18:15:26 24 4
gpt4 key购买 nike

当 Activity 开始时,某些设备上出现下一个奇怪的 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}

起初我以为问题出在 Google Play 服务中,但现在我找不到问题出在哪里。我还提供了我的 Activity 代码:

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;
}
}
}

最佳答案

您有一个 StateListDrawable,即一个可绘制的选择器资源,它似乎引用自身,因此在膨胀时会导致无限递归。

关于java - Android 堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29919863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com