繁体   English   中英

Android Studio:在一个活动中使用微调器在另一个活动中更改背景色的问题

[英]Android Studio: Issues using spinner in one activity to change background color in another

我是Android的新手。 本课程的实验要求我能够从活动A(PaletteActivity)中的微调器中选择一种颜色,并以该颜色为背景启动活动B(CanvasActivity)。

但是,应用程序崩溃,说我尝试对空对象引用调用虚拟方法private void setBgColor(String selectedColor) 谁能帮我找出原因?

这是PaletteActivity的代码:

package com.example.codyhunsberger.cis_3515_lab_3;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class PaletteActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_palette);
    final Intent i = new Intent(getApplicationContext(), CanvasActivity.class);

    Spinner spinner = (Spinner) findViewById(R.id.spinner);
    String[] strings = {"Red", "Green", "Blue", "Cyan","Gray","Magenta"};

    ArrayAdapter adapter = new ArrayAdapter(PaletteActivity.this,
            android.R.layout.simple_spinner_dropdown_item,
            strings);

    spinner.setAdapter(adapter);


    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            startActivity(new Intent(PaletteActivity.this, CanvasActivity.class));
            String strName = null;
            String color = parent.getItemAtPosition(position).toString();
            i.putExtra(color, strName);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });


}

}

和CanvasActivity:

package com.example.codyhunsberger.cis_3515_lab_3;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class CanvasActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_canvas);

        String color = "";

        Bundle extras = getIntent().getExtras();
        if (extras == null) {
            color = "White";
        }
        else {
            extras.getString(color);
        }

        setBgColor(color);
    }

    private void setBgColor(String selectedColor){
        RelativeLayout myLayout = (RelativeLayout) findViewById(R.id.myLayout);

        switch (selectedColor) {
            case "Red":
                myLayout.setBackgroundColor(Color.RED);
                break;
            case "Green":
                myLayout.setBackgroundColor(Color.GREEN);
                break;
            case "Blue":
                myLayout.setBackgroundColor(Color.BLUE);
                break;
            case "Cyan":
                myLayout.setBackgroundColor(Color.CYAN);
                break;
            case "White":
                myLayout.setBackgroundColor(Color.WHITE);
                break;
            case "Gray":
                myLayout.setBackgroundColor(Color.GRAY);
                break;
            case "Magenta":
                myLayout.setBackgroundColor(Color.MAGENTA);
                break;
        }

        if (selectedColor.equals("White")) {
            Toast.makeText(CanvasActivity.this, "Bundle extras is null", Toast.LENGTH_SHORT).show();
        }
    }
}

如果XML文件有帮助,我也可以添加这些文件,但是我可以肯定它们没有关联。 感谢您的光临!

更新:堆栈跟踪的第二个错误问题:

09-24 14:53:31.600 19931-19931/com.example.codyhunsberger.cis_3515_lab_3 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                           Process: com.example.codyhunsberger.cis_3515_lab_3, PID: 19931
                                                                                           java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.codyhunsberger.cis_3515_lab_3/com.example.codyhunsberger.cis_3515_lab_3.CanvasActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
                                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
                                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
                                                                                               at android.app.ActivityThread.access$900(ActivityThread.java:157)
                                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
                                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                               at android.os.Looper.loop(Looper.java:148)
                                                                                               at android.app.ActivityThread.main(ActivityThread.java:5551)
                                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
                                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
                                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
                                                                                               at com.example.codyhunsberger.cis_3515_lab_3.CanvasActivity.setBgColor(CanvasActivity.java:31)
                                                                                               at com.example.codyhunsberger.cis_3515_lab_3.CanvasActivity.onCreate(CanvasActivity.java:25)
                                                                                               at android.app.Activity.performCreate(Activity.java:6272)
                                                                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
                                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                                                                                               at android.app.ActivityThread.access$900(ActivityThread.java:157) 
                                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
                                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                               at android.os.Looper.loop(Looper.java:148) 
                                                                                               at android.app.ActivityThread.main(ActivityThread.java:5551) 
                                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 

您需要传递正确的意图才能开始活动。 更改您的代码,如下所示:

 // startActivity(new Intent(PaletteActivity.this, CanvasActivity.class));
 // String strName = null;
 String color = parent.getItemAtPosition(position).toString();
 i.putExtra("color", color);
 startActivity(i);

另外,在CanvasActivity ,您需要保存读取值:

Bundle extras = getIntent().getExtras();
if (extras == null) {
    color = "White";
} 
else { 
    color = extras.getString("color");
}

编辑:您的值的键已在上方错误使用。 进行了更改。

我已经通过返回活动XML并添加适当的ID来解决了该问题。 他们的画布活动不匹配。

默认情况下,它仍然会启动到错误的活动,但这是一个单独的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM