2015-11-04 77 views
0

我正在製作一個雞尾酒的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; 
} 

} 
+0

您是否從Webservice獲得響應? – KishuDroid

回答

0

一個選項可以讓您的自定義類實現Serializable接口,然後您可以使用意圖#putExtra()方法的putExtra(Serializable ..)變體傳遞意圖額外的對象實例。 try this link

0

使用這個美好的網站= 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); 

,您可以取回下一個活動顯示。

相關問題