2017-05-16 45 views
0

我试图通过意图将数据从活动发送到其他人。发送字符串整数工作完好。但是,当我加入目的相同Parecelable对象时,它总是返回弦乐整数对象。以下是我将数据设置为意图的代码。传递对象在活动意图中返回null

Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("SomeText", "sometext"); 
intent.putExtra("itemId", itemId); 
intent.putExtra("someuser",user); 

startActivity(intent); 

而在其他活动我得到值:

String som = getIntent().getStringExtra("SomeText"); 
int itemird = getIntent().getIntExtra("itemId", 0); 
User user = getIntent().getParcelableExtra("someuser"); 

我也尝试过不同的其他解决方案thisthisthis

这里任何人都可以给我建议我的错误是什么或者更好的解决方案?

所以这是我Parcelable类

public class User implements Parcelable{ 
    private int mData; 
    private String username; 
    private String imagePath; 
    private String userId; 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public void setImagePath(String imagePath) { 
     this.imagePath = imagePath; 
    } 

    public String getImagePath() { 
     return imagePath; 

    } 

    public User() { 

    } 

    public User(String username, String userId) { 
     this.username = username; 
     this.userId = userId; 
    } 
    public User(String username) { 
     this.username = username; 
    } 
    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 

    } 

    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { 
     public User createFromParcel(Parcel in) { 
      return new User(in); 
     } 

     public User[] newArray(int size) { 
      return new User[size]; 
     } 
    }; 

    private User(Parcel in) { 
     mData = in.readInt(); 
    } 

} 
+0

您可以使自定义Java对象实现Serializable并使用putExtra。如果不起作用,请粘贴错误日志。 –

+0

这可能是您的User类中的parcelable接口方法的实现问题。你可以在这里发布这些方法吗? – aravindsagar

+0

你必须坚持'writeToParcel'中的所有属性,并在构造函数'User(Parcel in)'中读取所有属性'看看这个链接,以获得更好的我的意思http://stackoverflow.com/questions/21250339/how-to-pass- arraylistcustomeobject-one-activity-to-another/21250450#21250450 –

回答

0

仔细阅读this答案Jeremy Logan。您应该:

1)为您的User类实施Parcelable;

2)为你的User类别铸造类,如User user = (User) getIntent().getParcelableExtra("someuser")intent.putExtra("someuser", (Parcelable)user)。这样的结构

+0

我的用户对象是一个Parcelable对象。 –

+0

因此,检查'公共静态最终Parcelable.Creator'方法。 –

0

通行证对象

Bundle b = new Bundle(); 
b.putParcelable("someuser",user); 
Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("SomeText", "sometext"); 
intent.putExtra("itemId", itemId); 
intent.putExtra(b); 
startActivity(intent); 

再接到类似这样的

Bundle b = getIntent().getExtras(); 
if(b != null) { 
User user = b.getParcelable("someuser"); 
} 
0

创建Parcelable类

public class User implements Parcelable{ 

     String name; 


     @Override 
     public int describeContents() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     /** 
     * Storing the User data to Parcel object 
     **/ 
     @Override 
     public void writeToParcel(Parcel dest, int flags) { 
      dest.writeString(name); 


     } 

     /** 
     * A constructor that initializes the User object 
     **/ 
     public User(String uName){ 
      this.name = uName; 

     } 

     /** 
     * Retrieving User data from Parcel object 
     * This constructor is invoked by the method createFromParcel(Parcel source) of 
     * the object CREATOR 
     **/ 
     private Student(Parcel in){ 
      this.mSName = in.readString(); 

     } 

     public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { 

      @Override 
      public User createFromParcel(Parcel source) { 
       return new User(source); 
      } 

      @Override 
      public User[] newArray(int size) { 
       return new User[size]; 
      } 
     }; 
    } 

public class MainActivity extends Activity { 

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

     mBtnOk.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        // Creating an instance of Student class with user input data 
        User userObj= new User ("Name"); 

        // Creating an intent to open the activity 
        Intent intent = new Intent(MainActivity.this, NextActivity.class); 

        // Passing data as a parecelable object to 
        intent.putExtra("user",userObj); 

        // Opening the activity 
        startActivity(intent); 
       } 
      }); 



    } 

    } 





    public class NextActivity extends Activity { 

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

    // Fetching data from a parcelable object passed from MainActivity 
      User user= getIntent().getParcelableExtra("user"); 



    } 

    } 
+0

做过同样的工作 –

+0

@SairaNawaz在你的writeToParcel()方法中检查你的类 dest.writeString(name);在您的代码中添加此行以获取名称和ID。 –

0

尝试与改变这种解决方案您User类象下面ANS它作品:

public class User implements Parcelable { 
private int mData; 
private String username; 
private String imagePath; 
private String userId; 

public String getUserId() { 
    return userId; 
} 

public void setUserId(String userId) { 
    this.userId = userId; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public void setImagePath(String imagePath) { 
    this.imagePath = imagePath; 
} 

public String getImagePath() { 
    return imagePath; 

} 

public User() { 
} 

public User(String username, String userId) { 
    this.username = username; 
    this.userId = userId; 
} 
public User(String username) { 
    this.username = username; 
} 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 

    dest.writeInt(mData); 
    dest.writeString(username); 
    dest.writeString(imagePath); 
    dest.writeString(userId); 
} 

private void readFromParcel(Parcel in) { 

    mData  = in .readInt(); 
    username = in .readString(); 
    imagePath = in .readString(); 
    userId = in .readString(); 
} 

public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { 
    public User createFromParcel(Parcel in) { 
     return new User(in); 
    } 

    public User[] newArray(int size) { 
     return new User[size]; 
    } 
}; 

    private User(Parcel in) { 
     readFromParcel(in); 
    } 

} 
0

我想你没有正确实现你的用户模型类。 您可以在飞溅的活动试试这个

public class User implements Parcelable { 

private int mData; 
private String username; 
private String imagePath; 
private String userId; 

public User(String username, String userId) { 
    this.username = username; 
    this.userId = userId; 
} 
public User(String username) { 
    this.username = username; 
} 
public User() {} // empty constructor 

public String getUserId() { 
    return userId; 
} 

public void setUserId(String userId) { 
    this.userId = userId; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public void setImagePath(String imagePath) { 
    this.imagePath = imagePath; 
} 

public String getImagePath() { 
    return imagePath; 

} 

@Override 
public int describeContents() { 
    return 0; 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 

    dest.writeInt(mData); 
    dest.writeString(username); 
    dest.writeString(imagePath); 
    dest.writeString(userId); 
} 

private User(Parcel in) { 
    mData  = in.readInt(); 
    username = in.readString(); 
    imagePath = in.readString(); 
    userId = in.readString();. 
} 

public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { 
    public User createFromParcel(Parcel in) { 
     return new User(in); 
    } 

    public User[] newArray(int size) { 
     return new User[size]; 
    } 
}; 

}

然后,你可以做到这一点。我假设你已经创建了一个用户对象要发送到MainActivity

Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("someuser",user); // using the (String name, Parcelable value) overload! 
intent.putExtra("SomeText", "sometext"); 
intent.putExtra("itemId", itemId); 
intent.putExtra(bundle); 

startActivity(intent); 

然后,您可以收到它在MainActivity这样

User user = (User) getIntent().getParcelableExtra("someuser"); 
0

嗨,为什么你使用parcelable如果序列化容易使用和易于理解和执行

实现串行你们班

public class Place implements Serializable { 
     private int id; 
     private String name; 

     public void setId(int id) { 
      this.id = id; 
     } 

     public int getId() { 
      return id; 
     } 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 
    } 

然后你就可以在第二活动意图

 Intent intent = new Intent(this, SecondAct.class); 
    intent.putExtra("PLACE", Place); 
    startActivity(); 

传递这个对象,你可以得到的数据是这样

Place place= (Place) getIntent().getSerializableExtra("PLACE"); 

parcelable使用时,有大量的数据需要明智送其他的你可以使用序列化

让我知道,如果不行

相关问题