在单独的活动

时间:2015-09-09 11:39:55

标签: android

我正在尝试构建一个简单的应用程序,只需通过单选按钮获取一些输入,搜索栏进度和复选框,然后返回一个详细说明用户是否喜欢猫或狗的屏幕。

到目前为止,我已经确认所有内容都运行良好,直到我在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?");
            }
        }
    }
}

2 个答案:

答案 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?");
  }
 }
}