创建意图时,方法getParcelableExtra()返回null

时间:2018-12-08 14:32:49

标签: java android android-volley listener

我有一个关于创建意图以及使用getParcelableExtra()方法将对象移交给它的问题。 该项目的目的是创建回收者视图。如果从回收商中选择了一项,则新的意图将开始,并应显示更多详细数据。

因为数据是从外部MySQL数据库中获取的,所以我将Volley用于大多数网络工作。

回收器是在Volley onResponse()方法内部实现的,该方法在应用程序启动时(onCreate)首先被调用。到目前为止,一切正常,回收站已正确加载并显示。

Traceback (most recent call last):
  File "getSNI.py", line 31, in <module>
    getSNI(ip,dport)
  File "getSNI.py", line 17, in getSNI
    server_certificate = ssl.get_server_certificate((ip, dport))
  File "/usr/lib/python2.7/ssl.py", line 1023, in get_server_certificate
    with closing(context.wrap_socket(sock)) as sslsock:
  File "/usr/lib/python2.7/ssl.py", line 369, in wrap_socket
    _context=self)
  File "/usr/lib/python2.7/ssl.py", line 617, in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 846, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:726)

如您所见,我为Volley onResponse方法创建了一个名为onSuccess的接口。在此方法中,我正在创建一个onItemClickListener,而这在这里变得很丑陋。 onItemClickListener会打开该项目的更详细视图,但是方法getParcelableExtra()返回NULL。无论我做什么,都永远不会返回Food类的对象。

public class UserAreaActivity extends AppCompatActivity{

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

    initializeRecycler();
}

    public void initializeRecycler() {

    operations.getFoodFromDB(getFoodID(), new IDatabaseOperations() {
        @Override
        public void onSuccess(final ArrayList<Food> food_list) {

            mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            mLayoutmanager = new LinearLayoutManager(UserAreaActivity.this);
            mAdapter = new FoodAdapter(food_list);
            mRecyclerView.setLayoutManager(mLayoutmanager);
            mRecyclerView.setAdapter(mAdapter);

            mAdapter.setOnItemClickListener(new FoodAdapter.OnItemClickListener() {
                @Override
                public void OnItemClick(int position) {
                    Intent intent = new Intent(UserAreaActivity.this, FoodProfile.class);
 GETS CORRECT OBJECT----->intent.putExtra("food", food_list.get(position));
                    startActivity(intent);
                }
            });

        }
    });

}

}

因此putExtra()可以按预期工作,并获得食物类的正确对象。但是getParcelableExtra()每次都返回NULL。因此,启动的意图中不会显示任何值。

食物分类:

public class FoodProfile extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(activity_food_profile);

    Food food = getIntent().getParcelableExtra("food");<----RETURNS NULL 


    String price = food.getPrice();
    String name = food.getName();
    String rating = ((Float)food.getRating()).toString();
    String imageRes = food.getmimgId();


    TextView mPrice = (TextView) findViewById(R.id.Price);
    mPrice.setText(price);
    TextView mName = (TextView) findViewById(R.id.Name);
    mName.setText(name);
    TextView mRating = (TextView) findViewById(R.id.Rating);
    mRating.setText(rating);

}

}

有人知道是什么导致getParcelableExtra()返回null吗?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如上所述,writeToParcel()是有问题的。包裹的读写顺序应相同。

请参考以下页面:

What is Parcelable in android

Using Parcelable

Understanding Androids Parcelable - Tutorial