Почему мой отправленный объект возвращается как ноль? Android Dev

Я пытался отделить объект и вернуть его значение методу MainActivity. Все свойства объекта были назначены, когда я записываю объект mItem в свой AddItemActivity перед его раздачей. Где-то на этом пути мои данные теряются... будь то с самого начала моего создания нового намерения, или это на принимающей стороне в MainActivity. То, что я пытаюсь сделать... это взять пользовательский ввод, создать объект элемента, передать этот объект в MainActivity и добавить его в Inventory. Есть идеи?

Вот основная деятельность:

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.gardnerwebideas.inventorytracker.R;
import com.gardnerwebideas.inventorytracker.adapters.ItemAdapter;
import com.gardnerwebideas.inventorytracker.models.Inventory;
import com.gardnerwebideas.inventorytracker.models.Item;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends ListActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private Item mNewItem;
    private Inventory mInventory;

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

        Button addButton = (Button) findViewById(R.id.addToInventoryButton);

        mInventory = new Inventory();
        mNewItem = new Item();

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addToInventory();
            }
        });

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
            case (1): {
                if (resultCode == Activity.RESULT_OK) {
                    Intent intent = getIntent();
                    mNewItem = intent.getParcelableExtra(AddItemActivity.ADD_ITEM);
                    new ItemAdapter(this, mInventory);
                    Toast.makeText(this,
                            "Inventory size: "
                                    + String.valueOf(mInventory.getSize())
                                    + mInventory.toString(),
                            Toast.LENGTH_LONG).show();
                }
                break;
            }
            default:
                break;
        }
    }

    public void addToInventory() {
        Intent intent = new Intent(this, AddItemActivity.class);
        startActivityForResult(intent, 1);
    }

}

Вот AddItemActivity:

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.gardnerwebideas.inventorytracker.models.Item;
import com.gardnerwebideas.inventorytracker.R;

import java.util.Date;

public class AddItemActivity extends AppCompatActivity {

    public static final String TAG = AddItemActivity.class.getSimpleName();

    public static final String ADD_ITEM = "ADD_ITEM";
    private Item mItem;
    private String mName;
    private String mDate;
    private String mDescription;
    private String mPrice;

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

        Button addButton = (Button) findViewById(R.id.addButton);

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createNewItem();
                mItem = new Item(mName, mDescription, mPrice, mDate);
                Log.d(TAG, "THE ITEM IS: " + mItem.toString());

                Intent intent = new Intent();
                intent.putExtra(ADD_ITEM, mItem);
                setResult(Activity.RESULT_OK, intent);
                finish();
            }
        });

    }

    private void createNewItem() {
        EditText itemName = (EditText) findViewById(R.id.nameField);
        EditText itemDescription = (EditText) findViewById(R.id.descriptionField);
        EditText itemPrice = (EditText) findViewById(R.id.priceField);

        mName = itemName.getText().toString();
        mDescription = itemDescription.getText().toString();
        mPrice = itemPrice.getText().toString();
        mDate = String.valueOf(new Date());
    }

}

Класс предмета:

import android.os.Parcel;
import android.os.Parcelable;

import java.util.Date;

public class Item implements Parcelable {

    private String mName;
    private String mInventoryDate;
    private String mDescription;
    private String mPrice;

    public Item(String name, String description, String price, String stringDate) {
        mName = name;
        mInventoryDate = stringDate;
        mDescription = description;
        mPrice = price;
    }

    public String[] getItemInfo() {
        String[] itemInfo = {mName, mDescription, mInventoryDate, mPrice};
        return itemInfo;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getInventoryDate() {
        return mInventoryDate;
    }

    public void setInventoryDate(String stringDate) {
        mInventoryDate = stringDate;
    }

    public String getDescription() {
        return mDescription;
    }

    public void setDescription(String description) {
        mDescription = description;
    }

    public String getPrice() {
        return mPrice;
    }

    public void setPrice(String price) {
        mPrice = price;
    }

    @Override
    public String toString() {
        return mName + " " + mInventoryDate + " " + mDescription + " " + mPrice;
    }

    @Override
    public int describeContents() {
        return 0; //Not necessary...
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(mName);
        dest.writeString(mInventoryDate);
        dest.writeString(mDescription);
        dest.writeString(mPrice);
    }

    private Item(Parcel in) {
        mName = in.readString();
        mInventoryDate = in.readString();
        mDescription = in.readString();
        mPrice = in.readString();
    }

    public static final Creator<Item> CREATOR = new Creator<Item>() {
        @Override
        public Item createFromParcel(Parcel source) {
            return new Item(source);
        }

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

}

И инвентарный класс:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Inventory {

    private List<Item> mInventoryItems;

    public Inventory() {
        mInventoryItems = new ArrayList<>();
    }

    public int getSize() {
        return mInventoryItems.size();
    }

    public void addItem(Item item) {
        mInventoryItems.add(item);
    }

    public Item getPosition(int position) {
        return mInventoryItems.get(position);
    }

    public List<Item> getInventoryItems() {
        return mInventoryItems;
    }

    public void setInventoryItems(List<Item> items) {
        mInventoryItems = items;
    }

    @Override
    public String toString() {
        return "Inventory{" +
                "mInventoryItems=" + mInventoryItems +
                '}';
    }

}

Я занимался этим около 18 часов, пытаясь понять это, и я просто пропускаю какую-то последнюю часть этого, я просто знаю это.

1 ответ

Решение

Проблема в вашем onActivityResult() метод, где вы звоните:

Intent intent = getIntent();

getIntent() возвращает Намерение, которое использовалось для создания Действия. Вы хотите использовать намерение, переданное в onActivityResult() метод., так:

mNewItem = data.getParcelableExtra(AddItemActivity.ADD_ITEM);
Другие вопросы по тегам