2017-01-08 3 views
0

Ich habe versucht, Arraylist von Werten zwischen zwei Aktivitäten passieren, aber ich bin immer Fehler wie below.Thanks im VorausPassing Arraylist von Werten zwischen zwei Aktivitäten .. Fehlern

Verursacht durch: java.lang.NullPointerException: Versuch um die virtuelle Methode 'android.os.Bundle android.content.Intent.getExtras()' für einen Null-Objektverweis unter com.example.android.myapplication.DetailActivity.getextras1 (DetailActivity.java:35) unter com.example.android aufzurufen .myapplication.MyService.onStartCommand (MyService.java:38) unter android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3180) unter android.app.ActivityThread.access $ 2200 (ActivityThread.java:182) unter android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1595) bei android.os.Handler.dispat chMessage (Handler.java:111) bei android.os.Looper.loop (Looper.java:194) bei android.app.ActivityThread.main (ActivityThread.java:5763) bei java.lang.reflect.Method.invoke (Native Methode) bei java.lang.reflect.Method.invoke (Methode.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:960) bei com.android.internal.os.ZygoteInit .main (ZygoteInit.java:755)

Code, der verwendet wird, um andere Aktivität

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 

    String[] appdescription = getResources().getStringArray(R.array.appdescriptionname); 
    final String appdescipl = appdescription[position]; 
    final int imagesList = noImagesList[position]; 
    final int imagesList2 = noImagesList2[position]; 

    Intent intent1 = new Intent(getApplicationContext(), DetailActivity.class); 
    intent1.putExtra("des","mydes"); 
    intent1.putExtra("appdescipl" , appdescipl); 
    intent1.putExtra("imagesList",imagesList); 
    intent1.putExtra("imagesList2",imagesList2); 
    startActivity(intent1); 
    } 
}); 

DetailActivity

public class DetailActivity extends Activity { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.detail_activity); 
    this.getextras1(); 
    this.getdescriptionofapp1(); 
    this.getImage1ofapp1(); 
    this.getImage2ofapp1(); 
    startService(new Intent(this, MyService.class)); 


} 


public Bundle getextras1() { 
    Bundle extras1 = getIntent().getExtras(); 
    return extras1; 
} 

public TextView getdescriptionofapp1() { 
    TextView descriptionofapp1 = (TextView) findViewById(R.id.descriptionofapp); 
    return descriptionofapp1; 
} 

public ImageView getImage1ofapp1() { 
    ImageView image1ofapp1 = (ImageView) findViewById(R.id.image1); 
    return image1ofapp1; 
} 

public ImageView getImage2ofapp1() { 
    ImageView image2ofapp1 = (ImageView) findViewById(R.id.image2); 
    return image2ofapp1; 
} 




} 
Call

MyService

public class MyService extends Service { 


public String description; 
public int image1; 
public int image2; 


@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

public void onCreate() { 
    super.onCreate(); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    DetailActivity i ; 
    i = new DetailActivity(); 
    Bundle extras = i.getextras1(); 
    TextView descriptionofapp = i.getdescriptionofapp1(); 
    ImageView image1ofapp = i.getImage1ofapp1(); 
    ImageView image2ofapp = i.getImage2ofapp1(); 



    if (extras.containsKey("des")){ 

     description = extras.getString("appdescipl"); 
     descriptionofapp.setText(description); 
     image1 = extras.getInt("imagesList"); 
     image1ofapp.setImageResource(image1); 
     image2 = extras.getInt("imagesList2"); 
     image2ofapp.setImageResource(image2); 
    } 

    else if (extras.containsKey("data")){ 
     description = extras.getString("appdatadescipl"); 
     descriptionofapp.setText(description); 
     image1 = extras.getInt("imagesOfLists"); 
     image1ofapp.setImageResource(image1); 
     image2 = extras.getInt("imagesOfLists2"); 
     image2ofapp.setImageResource(image2); 
    } 

    this.onDestroy(); 
    return START_STICKY; 
} 


@Override 
public void onDestroy() { 

    this.stopSelf(); 
} 
} 

Antwort

1

Proble ist hier

DetailActivity i ; 
i = new DetailActivity(); 
Bundle extras = i.getextras1(); 

Sie schaffen neue instance von Activity Klasse, aber sie assinged Ihre bundle in einem anderen instance des Activity.

Sie können bundle zu Ihren Diensten mit putExtra Methode von intent und getExtra im Dienst zu extrahieren passieren.

Empfänger verwenden, um Ihre Ansicht vom Dienst zu aktualisieren. Deine Annäherung ist falsch.

Werfen Sie einen Blick auf dort Android update activity UI from service

+0

Vielen Dank, Arbeitete gut .. –

0

Verwendung spezifischer putextra für jedes Objekt:

intent1.putStringExtra("des","mydes"); 
intent1.putStringExtra("appdescipl" , appdescipl); 
intent1.putIntExtra("imagesList",imagesList); 
intent1.putIntExtra("imagesList2",imagesList2); 

und dann gleich getExtra in DetailActivity

getIntent().getStringExtra("des"); 
getIntent().getStringExtra("appdescipl"); 
getIntent().getIntExtra("imagesList"); 
getIntent().getIntExtra("imagesList2"); 

ich es wäre hoffen verwenden hilfreich .

0

Besser Parcelable Object für mehrere Parameter verwenden. Sie eine Klasse Foo implementiert Parcel richtig es in Intent in einer Aktivität Angenommen haben, zu setzen:

Intent intent = new Intent(getApplicationContext(), DetailActivity.class); 
Foo foo = new Foo(); 
intent.putExtra("foo ", foo); 
startActivity(intent); 

es in DetailActivity von Vorsatz zu erhalten: -

Foo foo = getIntent().getExtras().getParcelable("foo"); 
String appDisc = foo.getDisc(); 
int appImage1 = foo.getImage1(); 
int appImage2 = foo.getImage2(); 
.... 

Ich hoffe, dass es hilfreich wäre.

Verwandte Themen