Java Android应用程序从api检索数据(从模型到活动)

Java Android应用程序从api检索数据(从模型到活动),java,android,api,android-activity,Java,Android,Api,Android Activity,我正在制作一款鸡尾酒android应用程序 我搜索鸡尾酒的名称,然后收到我正在使用的API中所有鸡尾酒的列表视图。我单击列表视图中的项目(鸡尾酒),然后在新活动(称为CocktailDisplay)中显示鸡尾酒的信息(名称、缩略图、成分等)。我通过intent传递Search鸡尾酒活动中的鸡尾酒名称。从那里,我只是在CocktailDisplay中显示该文本 我想从显示鸡尾酒的图像和名称开始 我遇到了问题,新的帮助,访问模型以获取缩略图所需的信息,最终是成分和其他信息 我是android开发新手

我正在制作一款鸡尾酒android应用程序

我搜索鸡尾酒的名称,然后收到我正在使用的API中所有鸡尾酒的列表视图。我单击列表视图中的项目(鸡尾酒),然后在新活动(称为CocktailDisplay)中显示鸡尾酒的信息(名称、缩略图、成分等)。我通过intent传递Search鸡尾酒活动中的鸡尾酒名称。从那里,我只是在CocktailDisplay中显示该文本

我想从显示鸡尾酒的图像和名称开始

我遇到了问题,新的帮助,访问模型以获取缩略图所需的信息,最终是成分和其他信息

我是android开发新手,所以我不确定自己是否走上了正确的道路

提前谢谢!这是我的密码

SearchActivity.java(将数据传递到CocktailDisplay.java部分)


一种选择是让您的自定义类实现可序列化接口,然后您可以使用intent#putExtra()方法的putExtra(Serializable..)变体在intent extra中传递对象实例。

使用这个精彩的网站=

在那里,粘贴您的“模型类”代码,在输出中您将得到如下内容-

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];
    }
};

您可以在下一个活动中看到这些信息。

您是否收到Web服务的响应?
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;
    }
}
<?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>
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;
}

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