2017-11-12 11 views
0

アクティビティA、アクティビティB、アクティビティCの3つのアクティビティがあります。アクティビティAからアクティビティBへのインテントをいくつかの値で渡しています。アクティビティBはそれを問題なく受け取ります。しかし、アクティビティCのonBackPress()からアクティビティBを開始するときに問題が発生します。私はアクティビティCでonBackPress()を上書きしてそこにインテントコードを入れました。私は、アクティビティCからアクティビティBを開始し、余分な値を渡すことはしません。しかし、私がバックボタンを押すと、アクティビティBの意図によって価値が得られなかったので、それは私にNPEを与えます。これを解決する方法は?1つのアクティビティから1つのアクティビティへの意図

public void onClick(View view) { 

      Intent i = new Intent(this, ActivityB.class); 
      i.putExtra("artist_id", artistsModel.getArtistID()); 
      aContext.startActivity(i); 


     } 

アクティビティB:

ArtistId = getIntent().getExtras().getLong("artist_id"); 

public void onClick(View view) { 


         Intent intent1 = new Intent(getApplicationContext(),ActivityC.class); 
         intent1.putExtra("ArtistIDs", ArtistId); 
         startActivity(intent1); 


        } 

基本的に私が必要なものは、アクティビティBにおける意図はアクティビティAからではなく活動C.

アクティビティAから値を受け取るべきですアクティビティC:

public void onBackPressed() { 

    Intent i = new Intent(this , ActivityB.class); 
    startActivity(i); 
} 
+0

はCからいくつかのランダムな値を入れて、あなたの問題解決@Override onActivityResultメソッド

protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 1 && resultCode == RESULT_OK){ // doAnything after back from activity-c or do't do anything } } 

を上書きputExtraとBには、AまたはCから来る値Bでそれを確認し、そしてそれはA. – JBR

答えて

0

ユーザーがCから来る場合Intentを無視したい場合は、[アクティビティのonCreateににあなたのロジックを変更:

Intent intent=getIntent(); 
if(intent.hasExtra("artist_id")){ 
    ArtistId=intent.getExtras().getLong("artist_id"); 

    }else{ 

    ArtistId=0; 
    } 

それが割り当てtrueたらどうそれがないことは、それは名前"artist_id"と意図hasExtraかどうかをチェックされますそれはArtistIdに、それ以外の場合はArtistIdになります。アクティビティCから

+0

から来る場合にのみ、うん、私は知っているそれを取るが、それはどの活動Cを破壊します 私はほしくない。 – Rektirino

+0

あなたは私の答えを編集できるようにCに戻ってみたい! – Xenolion

0

削除コード:あなたが完了していない場合

public void onBackPressed() { 

     // Intent code or don't 

    } 

この場合は、あなたの活動Bが再開されます活動Bあなたは意図活動を開始するためにコーディングする必要が他の BからアクティビティC

+0

ええ、私は知っているが、それは私が望まない活動Cを破壊するだろう。私はアクティビティBに戻るために戻るボタンを使用しています。 – Rektirino

0

getExtras()のヌルチェックをArtistIdに追加するだけです。 getExtras()nullであり、長いデータを取得しようとしているため、NullPointerExceptionが表示されています。

だから、解決策が

if(getIntent().getExtras() != null) { 
    ArtistId = getIntent().getExtras().getLong("artist_id", 0); 
} 

である私たちは

0

OK活動コードはOKですが、中にエキストラでこのキーが見つからない場合にも、私は0としてデフォルト値を取得するためにgetLong("artist_id, 0)を入れています活性-C onBackPressed()の代わりにこのコードを使用する

public void onBackPressed() { 
Intent i = new Intent(this , ActivityB.class); 
startActivity(i); 
} 

この

を使用
public void onBackPressed() { 
Intent i = new Intent(); 
setResult(RESULT_OK); 
finish(); 
} 

Intent intent1 = new Intent(getApplicationContext(),ActivityC.class); 
         intent1.putExtra("ArtistIDs", ArtistId); 
         startActivityforResult(intent1, 1); 

のonClick

で活動-Bクラスのと私はこのヘルプを願っていますし、

関連する問題