Android应用程序检索数据从API(模型到活动)
问题描述:
我正在制作一个鸡尾酒的Android应用程序。Android应用程序检索数据从API(模型到活动)
我搜索鸡尾酒的名字,然后收到我使用的API中所有鸡尾酒的列表视图。我点击列表视图中的项目(鸡尾酒),然后在新活动(名为CocktailDisplay)中显示鸡尾酒(名称,缩略图,配料等)的信息。我通过意向传递SearchCocktail活动中的鸡尾酒的名称。从那里,我只是在CocktailDisplay中显示该文本。
我想从显示鸡尾酒的图像和名称开始。
我遇到了麻烦,新的帮助,访问模型以获取缩略图所需的信息以及最终的成分和其他信息。
我是新来的android开发,所以我不知道我是否在正确的道路上。
在此先感谢!这是我的代码。
SearchActivity.java(通过部分数据到CocktailDisplay.java)
ListView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
DrinkRecipeModel value = (DrinkRecipeModel) ListView1.getItemAtPosition(position);
// selected item
String cocktail = value.getDrinkName();
Intent myIntent = new Intent(getApplicationContext(), CocktailDisplay.class);
// sending data to new activity
myIntent.putExtra("selected-item", cocktail);
startActivity(myIntent);
}
});
DrinkRecipeModel.java
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class DrinkRecipeModel {
@SerializedName("idDrink")
private int drinkId;
@SerializedName("strDrink")
private String drinkName;
@SerializedName("categories")
private String drinkCategories;
@SerializedName("strDrinkThumb")
private String drinkThumb;
@SerializedName("ingredients")
private ArrayList<String> ingredients;
public int getDrinkId() {
return drinkId;
}
public String getDrinkName(){
return drinkName;
}
public String getDrinkCategories(){
return drinkCategories;
}
public String getDrinkThumb(){
return drinkThumb;
}
public ArrayList<String> getIngredients() { return ingredients; }
public void setDrinkId(int drinkId) { this.drinkId = drinkId; }
public void setDrinkName(String drinkName) { this.drinkName = drinkName; }
public void setDrinkCategories(String drinkCategories) {
this.drinkCategories = drinkCategories;
}
public void setDrinkThumb(String drinkThumb) {
this.drinkThumb = drinkThumb;
}
public void setIngredients(ArrayList<String> ingredients) {
this.ingredients = ingredients;
}
}
activity_cocktail_display.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CocktailDisplayActivity" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cocktailImage"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:maxHeight="80dp"
android:maxWidth="80dp"
android:minHeight="10dp"
android:minWidth="10dp" />
<TextView
android:id="@+id/cocktailName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cocktailImage"
android:textStyle="bold"
android:layout_centerInParent="true" />
</RelativeLayout>
CocktailDisplay.java
public class CocktailDisplay extends Activity {
TextView cocktailName;
ImageView cocktailImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cocktail_display);
cocktailName = (TextView) findViewById(R.id.cocktailName);
cocktailImage = (ImageView) findViewById(R.id.cocktailImage);
// get the intent from which this activity is called.
Intent intent = getIntent();
// ***** Trying to access model data here...not happy *****
DrinkRecipeModel recipe = *not sure how to call*;
// fetch value from key-value pair and make it visible on TextView.
String item = intent.getStringExtra("selected-item");
cocktailName.setText(item);
// fetch value from key-value pair and make it visible on ImageView.
// ***** Trying to access thumbnail here...not happy *****
cocktailImage.setImageResource(recipe.getDrinkId());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_cocktail_display, menu);
return true;
}
}
答
一个选项可以让您的自定义类实现Serializable接口,然后您可以使用意图#putExtra()方法的putExtra(Serializable ..)变体传递意图额外的对象实例。 try this link
答
使用这个美好的网站= http://www.parcelabler.com/
有,粘贴“的模式类的代码和输出,你会得到这样的事情 -
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class DrinkRecipeModel implements Parcelable {
@SerializedName("idDrink")
private int drinkId;
@SerializedName("strDrink")
private String drinkName;
@SerializedName("categories")
private String drinkCategories;
@SerializedName("strDrinkThumb")
private String drinkThumb;
@SerializedName("ingredients")
private ArrayList<String> ingredients;
public int getDrinkId() {
return drinkId;
}
public String getDrinkName(){
return drinkName;
}
public String getDrinkCategories(){
return drinkCategories;
}
public String getDrinkThumb(){
return drinkThumb;
}
public ArrayList<String> getIngredients() { return ingredients; }
public void setDrinkId(int drinkId) { this.drinkId = drinkId; }
public void setDrinkName(String drinkName) { this.drinkName = drinkName; }
public void setDrinkCategories(String drinkCategories) {
this.drinkCategories = drinkCategories;
}
public void setDrinkThumb(String drinkThumb) {
this.drinkThumb = drinkThumb;
}
public void setIngredients(ArrayList<String> ingredients) {
this.ingredients = ingredients;
}
protected DrinkRecipeModel(Parcel in) {
drinkId = in.readInt();
drinkName = in.readString();
drinkCategories = in.readString();
drinkThumb = in.readString();
if (in.readByte() == 0x01) {
ingredients = new ArrayList<String>();
in.readList(ingredients, String.class.getClassLoader());
} else {
ingredients = null;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(drinkId);
dest.writeString(drinkName);
dest.writeString(drinkCategories);
dest.writeString(drinkThumb);
if (ingredients == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(ingredients);
}
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<DrinkRecipeModel> CREATOR = new Parcelable.Creator<DrinkRecipeModel>() {
@Override
public DrinkRecipeModel createFromParcel(Parcel in) {
return new DrinkRecipeModel(in);
}
@Override
public DrinkRecipeModel[] newArray(int size) {
return new DrinkRecipeModel[size];
}
};
现在用上述取代你的模型类的代码代码,你的模型类不是“可分类的”。 因此,你现在可以使用 -
myIntent.putExtra("receipe_item", drinkReceipeOBjectWhichIsParcelableNow);
,您可以取回下一个活动显示。
您是否从Webservice获得响应? – KishuDroid