【问题标题】:Serializable not sending putExtra in intent可序列化不发送 putExtra 意图
【发布时间】:2017-01-13 08:20:22
【问题描述】:

为什么我的意图中的 putExtra 不起作用,没有在意图中传递任何值。所有的值都出现在列表视图中,但是当我去DetailActivity 时单击列表视图上的一个项目时,现在没有任何值。提前感谢您的回答。

主要活动

    @Override
public void processFinish(String s) {
    Log.d(TAG,s);

    carList = new JsonConverter<Cars>().toArrayList(s, Cars.class);

    BindDictionary<Cars> dict = new BindDictionary<Cars>();
    dict.addDynamicImageField(R.id.ivImg1, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return product.Image;
        }
    }, new DynamicImageLoader() {
        @Override

        public void loadImage(String url, ImageView imageView) {

            ImageLoader.getInstance().displayImage(url, imageView); // Default options will be used

        }
    });
    dict.addStringField(R.id.tvCarModel, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Car Model: " + product.Car_Model;
        }
    });
    dict.addStringField(R.id.carID, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return ""+product.Car_No;
        }
    });
    dict.addStringField(R.id.tvCarType, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Car Type: " + product.Car_Type;
        }
    });
    dict.addStringField(R.id.tvCapacity, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Capacity: " + product.Capacity;
        }
    });
    dict.addStringField(R.id.tvFuelType, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Fuel Type: " + product.FuelType;
        }
    });
    dict.addStringField(R.id.tvPlateNumber, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Plate Number: " + product.PlateNumber;
        }
    });
    dict.addStringField(R.id.tvPoster, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Posted by: " + product.owner;
        }
    });
    dict.addStringField(R.id.tvPrice, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Price: " + product.carPrice;
        }
    });
    dict.addStringField(R.id.tvFrom1, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Range: " + product.rangeFrom+" ";
        }
    });
    dict.addStringField(R.id.tvTo1, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return " " + product.rangeTo;
        }
    });
    dict.addStringField(R.id.tvDriver, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Driver: " + product.carDriver;
        }
    });
    dict.addStringField(R.id.tvMaxDays, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return "Max Days: " + product.carDays;
        }
    });
    dict.addStringField(R.id.tvDriverFirst, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return " " + product.driverFirstName;
        }
    });
    dict.addStringField(R.id.tvDriverMiddle, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return " " + product.driverMiddleName;
        }
    });
    dict.addStringField(R.id.tvDriverLast, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return " " + product.driverLastName;
        }
    });
    dict.addStringField(R.id.tvOwnerContact, new StringExtractor<Cars>() {
        @Override
        public String getStringValue(Cars product, int position) {
            return " " + product.ownerContact;
        }
    });



    adapter = new FunDapter<>(
            getActivity(), carList, R.layout.layout_list, dict);

    lvCars.setAdapter(adapter);
    lvCars.setOnItemClickListener(this);

    if(swipeCar.isRefreshing()){
        swipeCar.setRefreshing(false);
    }
    adapter.notifyDataSetChanged();
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Cars selectedCars = carList.get(position);
    Intent in = new Intent(getActivity(), DetailActivity.class);
    in.putExtra("cars2", selectedCars);
    startActivity(in);
}

详细活动

        final Cars Cars = (Cars)getIntent().getSerializableExtra("cars2");

try {
if (Cars != null) {

    tvDriver321.setText(Cars.carDriver);
    tvMaxDays.setText(Cars.carDays);
    tvCarModel.setText(Cars.Car_Model);
    tvCarType.setText( Cars.Car_Type);
    tvCapacity.setText(""+Cars.Capacity);
    tvFuelType.setText(Cars.FuelType);
    tvPlateNumber.setText(Cars.PlateNumber);
    tvPoster.setText(Cars.owner);
    tvPrice.setText(Cars.carPrice);
    tvCarID.setText(""+Cars.Car_No);
    tvFrom.setText(Cars.rangeFrom);
    tvTo.setText(Cars.rangeTo);
    tvDriver.setText(Cars.driverFirstName);
    tvDriverLast.setText(Cars.driverLastName);
    tvContact.setText(Cars.ownerContact);

    Log.d(TAG,Cars.Car_Model);

    ImageLoader.getInstance().displayImage(Cars.Image, ivImage);

}

}catch (Exception e){
    System.out.println("Error in details: " + e.toString());
}

汽车类

public class Cars implements Serializable {



@SerializedName("Car_No")
public int Car_No;

@SerializedName("Car_Model")
public String Car_Model;

@SerializedName("Car_Type")
public String Car_Type;

@SerializedName("Capacity")
public  int Capacity;

@SerializedName("Image")
public String Image;

@SerializedName("fuelType")
public String FuelType;

@SerializedName("carPlatenuNumber")
public String PlateNumber;

@SerializedName("owner")
public String owner;

@SerializedName("carPrice")
public String carPrice;

@SerializedName("resDate")
public String resDate;

@SerializedName("resTime")
public String resTime;

@SerializedName("resLocation")
public String resLocation;

@SerializedName("rangeFrom")
public String rangeFrom;

@SerializedName("rangeTo")
public String rangeTo;

@SerializedName("carDriver")
public String carDriver;

@SerializedName("carDays")
public String carDays;

@SerializedName("driverFirstName")
public String driverFirstName;

@SerializedName("driverMiddleName")
public String driverMiddleName;

@SerializedName("driverLastName")
public String driverLastName;

@SerializedName("ownerContact")
public String ownerContact;


}

【问题讨论】:

  • 获取Cars selectedCars = carList.get(position);之后的日志。显示一些值,例如单击后的位置及其selectedCars
  • 如果你只使用Serializable在activity之间传递,你应该让Cars实现Parcelable。这是在 Android 中推荐的方法,它对我来说总是很好
  • @AmrAbed Serializable 仍然适用于这种情况。 '因为他的变量不包含任何实现Parcelable或不与Serializable竞争的对象
  • @TruongHieu 我知道它应该可以工作。我只是说这正是 Parcelable 应该用于的用途
  • 解决这个问题不同于寻找其他方法。

标签: android android-intent


【解决方案1】:

试试

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Car selectedCars = carList.get(position);
    Intent in = new Intent(getActivity(), DetailActivity.class);
    in.putExtra("cars2", selectedCars);
    startActivity(in);
}

在其他Activity:

final Car Cars = getIntent().getSerializableExtra("cars2");

【讨论】:

  • 他的carList 是一个List 对象。所以carList.get(position) 将返回 Car 对象。你可能错了。
  • 当我将 selectedCars 更改为 int 时,它不起作用,先生。
  • 不会是getIntExtra,你没有编辑完成:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2013-07-10
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多