2017-01-13 1 views
1

Почему мой putExtra в моих намерениях не работает, никакие значения не передаются в намерении. Все значения присутствуют в списке, но когда я нажимаю элемент в списке, когда я перехожу на DetailActivity, сейчас значений нет. Заранее благодарим за ответ.Serializable не отправляет putExtra в намерении

Главная Acitivty

@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); 
} 

DetailActivity

 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()); 
} 

Cars.class

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; 


} 
+0

Получить журнал после 'Автомобили selectedCars = carList.get (положение);'. Покажите мне некоторые значения, такие как позиция после нажатия и его 'selectedCars' – TruongHieu

+0

Если вы используете только Serializable для передачи действий, вы должны сделать' Cars' реализовать ['Parcelable'] (https://developer.android.com/reference/ android/os/Parcelable.html). Это рекомендуемый способ сделать это в Android, и он всегда отлично работает для меня –

+0

@AmrAbed Serializable все еще работает с этим делом. 'cos его переменная не содержит никакого объекта, который реализует 'Parcelable' или не сравнительный с' Serializable' – TruongHieu

ответ

0

Попробуйте

@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"); 
+0

Его 'carList' является объектом List. Поэтому 'carList.get (position)' будет возвращать объект Car. Вы можете ошибаться. – TruongHieu

+0

Когда я меняю 'selectedCars' на int, это не работает сэр. – JosephG

+0

Да, @TruongHieu прав. – JosephG

Смежные вопросы