2016-09-24 10 views
0

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)  

答えて

0

あなたは活動を開始するための右の意図を渡す必要があります。あなたのコードは以下のように変更します。

// 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"); 
} 

EDIT:値のためのあなたのキーが誤って上記で使用されました。変更を加えました。

+0

ご回答いただきありがとうございます。これは間違いなく私が働いている製品に近づきましたが、今では同じ型のより曖昧なエラーメッセージがありますが、メソッド 'int java.lang.String.hashCode()'を参照しています – hunsbct

+0

@ user3491551 stacktrace ? – Shaishav

+0

OPでそれを更新しましたが、コメントには長すぎます。 – hunsbct

0

私は自分のアクティビティXMLに戻り、適切なIDを追加することで問題を解決しました。彼らはキャンバス活動のためにミスマッチでした。

これはデフォルトで間違ったアクティビティに起動しますが、これは別の問題です。

関連する問題