2016-03-21 15 views
0

私はAndroid Studioを初めて使用しています。私はFirstActivityクラスの画像IDをSecondActivityクラスに渡そうとしています。プログラムは、アートワークのテキスト記述を含む水平方向にスライドするボタンの行を表示することになっています(この部分は機能します)。ボタンをクリックすると、対応するアート作品(エミュレータでのアプリケーションの実行停止)を表示するために、ImageActivityを起動する必要があります。putExtra()を使用して2番目のアクティビティでイメージを送信および表示する方法は?

アイデア?ありがとうございました!繰り返しますが、私はこれに全く新しいので、たとえそれが本当に明白であっても、どんな洞察も役に立つでしょう。ここで

はMainActivityです:

private LinearLayout mLinearList; 
    private String id; 
    private Painting painting; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 

     //REFERENCE THE SCROLLABLE LAYOUT STRUCTURE IN MAIN_SCREEN.XML 
     mLinearList = (LinearLayout) findViewById(R.id.linearList); 

     //FILL THE SCROLLABLE LAYOUT STRUCTURE WITH PAINTINGS 
     fillTextCarousel(); 

    } 

    private void fillTextCarousel() { 

     // POPULATE THE LINEAR LIST CAROUSEL WITH PAINTINGS AND DESCRIPTIONS 
     Button buttonItem; 

     for (int i = 0; i < RenaissanceDatabase.description.length; i++) { 
      //STORE THE INDIVIDUAL PAINTINGS AS BUTTONS 
      buttonItem = new Button(this); 


      painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]); 

      //USE THE CONTENT DESCRIPTION PROPERTY TO STORE 
      //PAINTING DATA 

      buttonItem.setContentDescription(painting.getDescription()); 
      buttonItem.setText(painting.getDescription()); 

      //SET AN ONCLICK LISTENER FOR THE TEXT BUTTON 
      buttonItem.setOnClickListener(displayPainting); 

      //ADD THE IMAGE BUTTON TO THE SCROLLABLE LINEAR LIST 
      mLinearList.addView(buttonItem); 
     } 
    } 

    private View.OnClickListener displayPainting = new View.OnClickListener() { 
     public void onClick(View btn) { 
     // COLLECT THE IMAGE STORED FOR THE PAINTING 
      Intent imgIntent = new Intent(getApplicationContext(), ImageActivity.class); 
      imgIntent.setAction(imgIntent.ACTION_SEND); 
      imgIntent.putExtra("image_id:",painting.getId()); 
      startActivity(imgIntent); 

     } 
    }; 

は、ここで私はImageActivityのために、これまで持っているものです。

private Button imgButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 

    painting = new Painting(RenaissanceDatabase.description[index], RenaissanceDatabase.id[index]); 

    Intent objIntent=this.getIntent(); 
    ImageView art = (ImageView) findViewById(R.id.imageView2); 
    art.setImageResource(Integer.parseInt(getExtra()));; 
} 

private String getExtra(){ 
    String image_id = getIntent().getStringExtra("image_id"); 
    return image_id; 
} 

そしてここでは、絵画のデータベースは次のようになります。

public static String description[] = { 
      "Venus of Urbino\nTitan, 1538", 
      "St. John the Baptist\nLeonardo da Vinci, 1516", 
      "Protrait of Baldassare Castiglione\nRaphael, 1515", 
      "The Entombent of Christ\nCaravaggio, 1603", 
      "Coronation of the Virgin\nFra Angelico, 1435", 
      "Mars and Venus\n Sandro Bottcelli, 1483"}; 

    public static int id[] = { 
      R.drawable.painting1, // VENUS OF URBINO 
      R.drawable.painting2, // ST.JOHN BAPTIST 
      R.drawable.painting3, // BALDASSARE 
      R.drawable.painting4, // ENTOMBENT OF CHRIST 
      R.drawable.painting5, // CORONOATION 
      R.drawable.painting6 // MARS AND VENUS 
    }; 

ここでスタックですクラッシュするとトレース:

03-21 15:41:01.283 14004-14004/edu.augustana.csc490.renaissancepaintings E/AndroidRuntime:致命的除外:メイン java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {edu.augustana.csc490.renaissancepaintings/"null" at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) (android.app.ActivityThread.handleLaunchActivity(ActivityThread))でedu.augustana.csc490.renaissancepaintings.ImageActivity}:java.lang.NumberFormatExceptionが無効です。 .java:2084)android.app.ActivityThread.accessの $ 600(ActivityThread.java:130) android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1195) android.os.Handler.dispatchMessage(Handler.java:99)android.os.Looper.loop(Looper.java:137)の とandroid.app.ActivityThread.main(ActivityThread.java:4745) at java .lang.reflect.Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(ネイティブメソッド) 原因:java.lang.NumberFormatException:無効なint: "null " at java.lang.Integer.invalidInt(Integer.java:138) (java.lang.Integer.parseInt(Integer.java:355) 、java.lang.Integer.parseInt(Integer.java:332) at android.app.Instrumentation.callActivityOnCreateでedu.augustana.csc490.renaissancepaintings.ImageActivity.onCreate android.app.Activity.performCreate(Activity.java:5008)で(ImageActivity.java:40) (Instrumentation.java:1079) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) ででandroid.app.ActivityThread.access $ 600(ActivityThread.java:130) android.app.ActivityThread $ Hにあります。(android.os.Hostler.dispatchMessage(Handler.java:99) のハンドルメッセージ(ActivityThread.java:1195) android.os.ActivityThread.mainの (android.os.Looper.loop(Looper.java:137) ) ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(ネイティブメソッド) 03-21 1 5:41:03.083 14004-14004 /? I /プロセス:シグナルを送信します。 PID:14004 SIG:

art.setImageResource(Integer.parseInt(getExtra())); 
+1

getIntent().hasExtra("key")アプリがクラッシュしたときに生成されたスタックトレースを投稿使用して、アプリあなたをクラッシュからnullの例外を防止すること、それを取得しよう – CQM

+0

だけで最新のコードとスタックトレース – Freckles

答えて

0

2つの問題で9

+0

ありがとう!これは多くの助けと私はほとんどそこにいるように感じる。ボタンがクリックされると、プログラムはもはやクラッシュせず、画像を表示します。ただし、配列の最後のイメージのみを表示し続けます。私はこれを新しい質問としてここに掲載しました:http://stackoverflow.com/questions/36143316/correct-integer-not-being-passed-through-putextraありがとう、トン! – Freckles

1

変更

art.setImageDrawable(getResources().getDrawable(Integer.parseInt(getExtra()))); 

、あなたがタイプミスがあります

1)imgIntent.putExtra( "image_idは:"、 paint.getId());

image_id:にはコロンがあり、対応するキーの取得にはコロンがありません。だからあなたのnullを説明します。あなたの検索で

2)、整数にキャストを停止し、代わりに、将来的には代わりにgetStringExtra

getIntExtra("image_id")を使用し、また、あなたの意思バンドルは、あなたの前に、あなたが探しているキーが含まれているかどうかを確認することができます

+0

おかげShadab--にそれを編集した、ありがとう私はまだ無効なint: "null"例外が私はその行を変更すると、取得します。 MainActivityでputExtra()を正しく使用して、ペイントIDを送信していますか? ImageActivityのgetExtra()メソッドでその情報を正しく引き出していますか? – Freckles

関連する問題