发布了我的问题 here too.
一个初学者..我正在做一个学校 map 应用程序。
首先,我的背景有 4 个按钮(level3、level4、level5、level6)。
我尝试点击所有的按钮,通常在点击3个之后,下一个会崩溃。(每个级别按钮进入一个级别 map ,点击房间图像按钮,我将进入gallery-imageswitcher)
我在每个关卡 map 中至少有 5 个 ImageSwitcher,因此总共有大约 20 多个 ImageSwitcher 画廊。
我使用 Drawable 而不是 Bitmap 来完成我所有的工作。我有很多图片(因为它是学校 map ,显示我学校的所有照片,以及所有这些背景和 ImageButton)
我做了一些研究,有问题的是那些使用位图的。一些可以解决的方法是 system.gc(); 和 bitmap.recycle(虽然不太确定如何使用它)
在我的主后台-starttour.java
public class StartTour extends Activity {
private SoundManager mSoundManager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ttour);
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
mSoundManager.addSound(1, R.raw.beep);
//play music
final MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.jazz);
mPlayer.start();
final Button button = (Button) findViewById(R.id.back);
button.setOnClickListener(new Button.OnClickListener() {
// Implement the OnClickListener callback
public void onClick(View v) {
// do something when the button is clicked
startActivity(new Intent("android.com.Android"));
mSoundManager.playSound(1);
mPlayer.stop();
}
});
final Button button1 = (Button) findViewById(R.id.level3);
button1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// Perform action on click
startActivity(new Intent("android.com.Lvl3"));
mSoundManager.playSound(1);
mPlayer.stop();
}
});
final Button button2 = (Button) findViewById(R.id.level4);
button2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// Perform action on click
startActivity(new Intent("android.com.Lvl4"));
mSoundManager.playSound(1);
mPlayer.stop();
}
});
final Button button3 = (Button) findViewById(R.id.level5);
button3.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// Perform action on click
startActivity(new Intent("android.com.Lvl5"));
mSoundManager.playSound(1);
mPlayer.stop();
}
});
final Button button4 = (Button) findViewById(R.id.level6);
button4.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// Perform action on click
startActivity(new Intent("android.com.Lvl6"));
mSoundManager.playSound(1);
mPlayer.stop();
}
});
}
}
<ImageView android:id="@+id/ilevel4" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:src="@drawable/level4map"
android:layout_gravity="center"/>
<Button
android:id="@+id/m412button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="92.5px"
android:layout_marginTop="95px"
android:background="@drawable/m412_button" />
<Button
android:id="@+id/m411button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="92.5px"
android:layout_marginTop="248.8px"
android:background="@drawable/m411_button" />
<Button
android:id="@+id/m410button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="92.5px"
android:layout_marginTop="334.8px"
android:background="@drawable/m410_button" />
<Button
android:id="@+id/m405button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6px"
android:layout_marginTop="246.5px"
android:background="@drawable/m405_button" />
<Button
android:id="@+id/m406button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6px"
android:layout_marginTop="335px"
android:background="@drawable/m406_button" />
<Button
android:id="@+id/m419button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="59.5px"
android:background="@drawable/m419_button" />
<Button
android:id="@+id/m420button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="168.5px"
android:background="@drawable/m420_button" />
<Button
android:id="@+id/m421button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="240.5px"
android:background="@drawable/m421_button" />
<Button
android:id="@+id/m422button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="335px"
android:background="@drawable/m422_button" />
</RelativeLayout>
在我的关卡 4.xml 中
<ImageView android:id="@+id/ilevel4" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:src="@drawable/level4map"
android:layout_gravity="center"/>
<Button
android:id="@+id/m412button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="92.5px"
android:layout_marginTop="95px"
android:background="@drawable/m412_button" />
<Button
android:id="@+id/m411button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="92.5px"
android:layout_marginTop="248.8px"
android:background="@drawable/m411_button" />
<Button
android:id="@+id/m410button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="92.5px"
android:layout_marginTop="334.8px"
android:background="@drawable/m410_button" />
<Button
android:id="@+id/m405button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6px"
android:layout_marginTop="246.5px"
android:background="@drawable/m405_button" />
<Button
android:id="@+id/m406button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6px"
android:layout_marginTop="335px"
android:background="@drawable/m406_button" />
<Button
android:id="@+id/m419button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="59.5px"
android:background="@drawable/m419_button" />
<Button
android:id="@+id/m420button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="168.5px"
android:background="@drawable/m420_button" />
<Button
android:id="@+id/m421button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="240.5px"
android:background="@drawable/m421_button" />
<Button
android:id="@+id/m422button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="260px"
android:layout_marginTop="335px"
android:background="@drawable/m422_button" />
</RelativeLayout>
在level4.java中
public class Level4 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tlevel4);
final Button button1 = (Button) findViewById(R.id.m405button);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on click
startActivity(new Intent("android.com.M405"));
}
});
final Button button2 = (Button) findViewById(R.id.m406button);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on click
startActivity(new Intent("android.com.M406"));
}
});
}
}
在 logcat 中
11-03 12:35:55.194: ERROR/dalvikvm-heap(708): 483406-byte external allocation too large for this process.
11-03 12:35:55.194: ERROR/(708): VM won't let us allocate 483406 bytes
11-03 12:35:55.204: DEBUG/AndroidRuntime(708): Shutting down VM
11-03 12:35:55.213: WARN/dalvikvm(708): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
11-03 12:35:55.213: ERROR/AndroidRuntime(708): Uncaught handler: thread main exiting due to uncaught exception
11-03 12:35:55.254: ERROR/AndroidRuntime(708): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.com/android.com.Level3}: android.view.InflateException: Binary XML file line #7: Error inflating class java.lang.reflect.Constructor
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.access$1800(ActivityThread.java:112)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.os.Looper.loop(Looper.java:123)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.main(ActivityThread.java:3948)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Method.invoke(Method.java:521)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at dalvik.system.NativeStart.main(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class java.lang.reflect.Constructor
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.createView(LayoutInflater.java:512)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:309)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.Activity.setContentView(Activity.java:1626)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.com.Level3.onCreate(Level3.java:19)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): ... 11 more
11-03 12:35:55.254: ERROR/AndroidRuntime(708): Caused by: java.lang.reflect.InvocationTargetException
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.widget.ImageView.<init>(ImageView.java:103)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Constructor.constructNative(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.createView(LayoutInflater.java:499)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): ... 22 more
11-03 12:35:55.254: ERROR/AndroidRuntime(708): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:363)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:212)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:663)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.content.res.Resources.loadDrawable(Resources.java:1637)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.widget.ImageView.<init>(ImageView.java:113)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): ... 26 more
如果我先点击任何按钮并进入关卡 map ,它会在我查看 imageswitcher 图片时崩溃。
在日志中
11-03 09:17:34.308: INFO/ActivityManager(564): Starting activity: Intent { action=android.com.M615 comp={android.com/android.com.M615_gallery} }
11-03 09:17:34.638: ERROR/dalvikvm-heap(712): 212800-byte external allocation too large for this process.
11-03 09:17:34.638: ERROR/(712): VM won't let us allocate 212800 bytes
11-03 09:17:34.638: DEBUG/AndroidRuntime(712): Shutting down VM
11-03 09:17:34.648: WARN/dalvikvm(712): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
11-03 09:17:34.648: ERROR/AndroidRuntime(712): Uncaught handler: thread main exiting due to uncaught exception
11-03 09:17:34.677: ERROR/AndroidRuntime(712): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:363)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:212)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:663)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.content.res.Resources.loadDrawable(Resources.java:1637)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.content.res.Resources.getDrawable(Resources.java:535)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.ImageView.resolveUri(ImageView.java:482)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.ImageView.setImageResource(ImageView.java:268)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.com.M615_gallery$AddImgAdp.getView(M615_gallery.java:71)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.makeAndAddView(Gallery.java:754)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.fillToGalleryRight(Gallery.java:703)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.layout(Gallery.java:634)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.onLayout(Gallery.java:339)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.ViewRoot.performTraversals(ViewRoot.java:929)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.os.Looper.loop(Looper.java:123)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.app.ActivityThread.main(ActivityThread.java:3948)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at java.lang.reflect.Method.invoke(Method.java:521)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at dalvik.system.NativeStart.main(Native Method)
如果有人能提供帮助,我真的很感激..谢谢
PS:我的应用程序中有大量图片。我在每个级别中至少有 5 个 ImageSwitcher 画廊,所以我的应用程序中总计有 20 多个图像切换器。
最佳答案
我必须在这里做一些猜测,因为您的命名和行号并不完全匹配。
你有这一行,例如:
startActivity(new Intent("android.com.Lvl4"));
但是您的 Activity 名为“android.com.Level4”。当您将布局称为“level4.xml”时,您正在膨胀布局“tlevel4”。另外,您粘贴的错误是针对 Level3 的。也许它们相似,但行号很重要,所以最好发布相同的错误和类。
我并不是要挑剔,这些细节在尝试破译您不熟悉的代码时会产生很大的不同。
无论如何,在这种情况下,我认为很清楚发生了什么。
错误 1 和 2 这两个错误都是内存不足异常。在这两种情况下,您都要求操作系统为您提供加载一些大型资源的内存,而操作系统只是告诉您您已经受够了。如果您发现它一直在发生,那么几乎可以肯定您在某处泄漏了内存。您提到广泛使用可绘制对象。您要非常小心地处理这些,因为当您将可绘制对象添加到 View 时,它会保留对该 View 的引用……它具有对上下文的引用。我在你发布的代码中没有看到任何明显的东西,但我敢打赌你有某种上下文泄漏。阅读this article看看他们谈论的内容是否响起。
此外,我注意到您的包名称是 android.com(即 android.com.Lvl3)。也许您只是为了发布而编辑了它,但它确实应该以 com 开头,即 com.yourProjectName.Lvl3。
哦,请不要这样做:
startActivity(new Intent("android.com.Android"));
只需调用 this.finish();
关于android - 外部分配对于这个过程来说太大了,错误膨胀类,位图大小超过 VM 预算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087367/
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
假设您在Ruby中执行此操作:ar=[1,2]x,y=ar然后,x==1和y==2。是否有一种方法可以在我自己的类中定义,从而产生相同的效果?例如rb=AllYourCode.newx,y=rb到目前为止,对于这样的赋值,我所能做的就是使x==rb和y=nil。Python有这样一个特性:>>>classFoo:...def__iter__(self):...returniter([1,2])...>>>x,y=Foo()>>>x1>>>y2 最佳答案 是的。定义#to_ary。这将使您的对象被视为要分配的数组。irb>o=Obje
我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内
我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ
使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案
这是我理想中想要的。用户做:a="hello"输出为Youjustallocated"a"!=>"Hello"顺序无关紧要,只要我能实现该消息即可。 最佳答案 不,没有直接的方法可以做到这一点,因为在执行代码之前,Ruby字节码编译器会丢弃局部变量名。YARV(MRI1.9.2中使用的RubyVM)提供的关于局部变量的唯一指令是getlocal和setlocal,它们都对整数索引进行操作,而不是变量名。以下是1.9.2源代码中insns.def的摘录:/****************************************
我想在Windows7上安装带有ruby1.9.3的rspec-railsgem。我收到一些错误消息,提示无法安装某些json库。所以,我使用下面的说明来解决它。来源=The'json'nativegemrequiresinstalledbuildtools从[rubyinstaller.org][3]下载[Ruby1.9.3][2]从[rubyinstaller.org][3]下载DevKit文件对于Ruby1.9.3,使用[DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe][4]将DevKit解压到路径C:\Ruby193\DevKit运行cd
是否有可能以某种方式访问Class.new范围内的a?a=5Class.new{defb;aend}.new.b#NameError:undefinedlocalvariableormethod`a'for#:0x007fa8b15e9af0>#:in`b' 最佳答案 即使@MarekLipka的回答是正确的——改变变量范围总是有风险的。这是可行的,因为每个block都带有创建它的上下文,因此您的局部变量a突然变得不那么局部了——它变成了一个“隐藏的”全局变量:a=5object=Class.new{define_method(