Как отправить объект из одного вида деятельности в другой с намерением.putExtra и посылки?
Используя следующий URL Как отправить объект из одного вида деятельности Android в другой с помощью Intents?
Я сделал пример приложения следующим образом
Scrollview1.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Scrollview1 extends Activity {
static int i;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.Button01);
b.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Intent i = new Intent(Scrollview1.this, Result.class);
Name n = new Name();
n.setI(20);
n.setS1("Hello");
n.setS2("World");
i.putExtra("Name", n);
startActivity(i);
}
});
}
}
/ / имя.java
import android.os.Parcel;
import android.os.Parcelable;
public class Name implements Parcelable{
int i;
String s1;
String s2;
public Name(){
}
private Name(Parcel in){
in.readInt();
in.readString();
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public String getS1() {
return s1;
}
public void setS1(String s) {
this.s1 = s;
}
public String getS2() {
return s2;
}
public void setS2(String s) {
this.s2 = s;
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(i);
dest.writeString(s1);
dest.writeString(s2);
}
public static final Name.Creator<Name> CREATOR = new Name.Creator<Name>() {
public Name createFromParcel(Parcel in) {
return new Name(in);
}
public Name[] newArray(int size) {
return new Name[size];
}
};
}
/ / Результат.java
import android.app.Activity;
import android.os.Bundle;
public class Result extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Name a = (Name)getIntent().getParcelableExtra("Name");
System.out.println("Int : "+a.getI());
System.out.println("String : "+a.getS1());
System.out.println("String : "+a.getS2());
}
}
Но это класс результата I, получающий null. - Что случилось?
3 ответа:
В:
private Name(Parcel in){ in.readInt(); in.readString(); }
Вы читаете из посылки, но на самом деле не присваиваете информацию переменной.
Я думаю, что вы должны изменить это.
private Name(Parcel in){ i= in.readInt(); s1 = in.readString(); s2 = in.readString(); }
В соответствии с документацией для
getParcelableExtra
он заявляет, что возвращает null, если parcelable содержимое не найдено.Попробуйте это в своем результате.java
Name a = (Name)getIntent().getExtras().getParcelable("Name");
Вместо того, что вы делаете сейчас
Name a = (Name)getIntent().getParcelableExtra("Name");
Я надеюсь на эту помощь. Скажите мне, если он нашел полезным