我正在尝试构建一个简单的应用程序,只需通过单选按钮获取一些输入,搜索栏进度和复选框,然后返回一个详细说明用户是否喜欢猫或狗的屏幕。
到目前为止,我已经确认所有内容都运行良好,直到我在Activity2中尝试setImageDrawable()
。我已经设法让TextView显示正确的文本行,即:你喜欢DOGS,表示代码的意图和putExtra()
位工作得很好。
唯一的问题就是这行代码,(注释掉它会让应用程序正常工作)
image2.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.meceline));
我已经三次检查以确保我
1)将图像放入Android Studio的布局文件夹
2)图像是完全小写的字母
3)名称在Java文件中拼写正确。
我在另一个单独的项目中使用完全相同的图像尝试完全相同的代码,我在MainActivity中将Image设置为ImageView,并且工作得很好。现在唯一的区别是,我将一个Image设置为我从MainActivity获得的Activity2。
整个代码都在下方,并提前感谢任何可以帮助我的人。
这是错误。
09-09 10:57:05.479 24786-24786/com.example.cartermah.dogorcat E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:503)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:356)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:800)
at android.content.res.Resources.loadDrawable(Resources.java:2105)
at android.content.res.Resources.getDrawable(Resources.java:695)
at android.widget.ImageView.resolveUri(ImageView.java:636)
at android.widget.ImageView.setImageResource(ImageView.java:365)
at com.example.cartermah.dogorcat.activity2.onCreate(activity2.java:33)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
OH!我刚刚意识到并且用Google搜索了错误的含义。它只是意味着我试图加载的图像太大了。这让我有另一个问题。我可以使用更小,更低分辨率的图像,但是没有办法坚持使用我想要使用的当前图像吗?
public class MainActivity extends AppCompatActivity {
private RadioGroup radgroup1;
private RadioButton radbutton1;
private RadioGroup radgroup2;
private RadioButton radbutton2;
private Button button1;
private SeekBar seekbar;
public int Dog;
public int Cat;
private CheckBox check1;
private CheckBox check2;
private int seekbarcheck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radgroup1 = (RadioGroup) findViewById(R.id.radgroup1);
button1 = (Button) findViewById(R.id.button1);
radgroup2 = (RadioGroup) findViewById(R.id.droolgroup);
seekbar = (SeekBar) findViewById(R.id.seekbar);
Dog = 0;
Cat = 0;
check1 = (CheckBox) findViewById(R.id.dogbox);
check2 = (CheckBox) findViewById(R.id.catbox);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int chosen1 = radgroup1.getCheckedRadioButtonId();
radbutton1 = (RadioButton) findViewById(chosen1);
if (radbutton1.getText().equals("Whiskers")) {
Dog = Dog + 1;
} else if (radbutton1.getText().equals("Tails")) {
Cat = Cat + 1;
}
seekbarcheck = seekbar.getProgress();
if (seekbarcheck > 5) {
Dog = Dog + 1;
} else {
Cat = Cat + 1;
}
if (check1.isChecked()) {
Dog = Dog + 1;
}
if (check2.isChecked()) {
Cat = Cat + 1;
}
int chosen2 = radgroup2.getCheckedRadioButtonId();
radbutton2 = (RadioButton) findViewById(chosen2);
if (radbutton2.getText().equals("YES")) {
Dog = Dog + 1;
}
if (radbutton2.getText().equals("NO")) {
Cat = Cat + 1;
}
Intent intent1 = new Intent(MainActivity.this, activity2.class);
if (Dog > Cat) {
intent1.putExtra("result", 1);
} else if (Cat > Dog) {
intent1.putExtra("result", 2);
} else if (Dog == Cat) {
intent1.putExtra("result", 3);
}
startActivity(intent1);
}
});
}
}
活动2:
public class activity2 extends AppCompatActivity {
private TextView text1;
private ImageView image2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
text1 = (TextView) findViewById(R.id.textresult);
image2 = (ImageView) findViewById(R.id.boo123);
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
int result = bundle.getInt("result");
if (result == 1) {
text1.setText("YOU LIKE DOGS");
image2.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.meceline));
} else if (result == 2) {
text1.setText("YOU LIKE CATS");
image2.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.pau));
} else if (result == 3) {
text1.setText("Cheese?");
}
}
}
}
答案 0 :(得分:0)
而不是
image2.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.meceline));
试试这个
image2.setImageDrawable(this.getDrawable(R.drawable.meceline));
答案 1 :(得分:0)
您传递了intent1.putExtra("结果",1);
并且在activity2中你获得了捆绑的价值 但请记住,您还没有通过捆绑,而是将密钥发送到#34;结果"。
所以在你的第二个活动中做一件事就是放这个代码 确定这会对你有所帮助
Intent mIntent = getIntent();
int result = mIntent.getIntExtra("result", 0);
请不要在activity2中使用bundle。 试试这个并随意提出任何问题。 :)
这里我正在编写您的activity2的完整代码。 替换此代码..
public class activity2 extends AppCompatActivity {
private TextView text1;
private ImageView image2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
text1 = (TextView) findViewById(R.id.textresult);
image2 = (ImageView) findViewById(R.id.boo123);
Intent mIntent = getIntent();
int result = mIntent.getIntExtra("result", 0);
if (result == 1) {
text1.setText("YOU LIKE DOGS");
image2.setImageResource(R.drawable.meceline);
} else if (result == 2) {
text1.setText("YOU LIKE CATS");
image2.setImageResource(R.drawable.pau));
} else if (result == 3) {
text1.setText("Cheese?");
}
}
}