Androidは非常に新しいものです。私のコースのラボでは、アクティビティA(PaletteActivity)のスピナーから色を選択し、その色をバックグラウンドとしてアクティビティB(CanvasActivity)を起動する必要があります。Androidスタジオ:1つのアクティビティでスピナーを使用して別のアクティビティで背景色を変更する問題
しかし、nullオブジェクト参照で仮想メソッド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ファイルは、私があまりにもそれらを追加することができます役立つだろうが、私は、彼らがいないならかなり確信している場合関連する見てくれてありがとう!
更新:2番目のエラーの問題のスタックトレース:
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)
ご回答いただきありがとうございます。これは間違いなく私が働いている製品に近づきましたが、今では同じ型のより曖昧なエラーメッセージがありますが、メソッド 'int java.lang.String.hashCode()'を参照しています – hunsbct
@ user3491551 stacktrace ? – Shaishav
OPでそれを更新しましたが、コメントには長すぎます。 – hunsbct