私はこの問題に数日間立ち往生しており、解決策が見えません。
私はmysqlからphpを介してjson配列にデータを渡しています。私はjsonをループし、整数として抽出する必要があるデータセットの1つであるハッシュマップにデータを配置し、カスタムビルドのgetView内のswitch/caseまたはifステートメントで使用します。
評価データは文字列として提供され、評価に応じて星の数を設定するには if ステートメントを使用する必要がありますが、getView() で int に変換する際に問題が発生します。
どんな助けでも感謝されます レビュー = json.getJSONArray(TAG_REVIEWS);
//looping through all the reviews
for(int i=0; i<reviews.length(); i++){
JSONObject r = reviews.getJSONObject(i);
//Storing each JSON items of id and user name from the array in variables
String rating = r.getString(TAG_RATING);
String content = r.getString(TAG_CONTENT);
String userName = r.getString(TAG_USER_NAME);
//new hashmap object to hold the items from JSONArray
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_RATING, rating); //THIS IS THE DATA I WILL NEED AS INT
map.put(TAG_CONTENT, content);
map.put(TAG_USER_NAME, userName);
map.put(TAG_RANK, rank);
//adding items to the arraylist object
reviewList.add(map);
}
}else{
Intent noReviews = new Intent(getApplicationContext(),
AllProductsActivity.class);
//adding flags to close all prior activities
noReviews.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(noReviews);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new CustomReviewListAdapter(
ProductReviews.this, reviewList,
R.layout.list_review_item_layout, new String[] {TAG_CONTENT,
TAG_RANK, TAG_RATING
});
setListAdapter(adapter);
}
私のカスタム アダプターについては、以下のすべての IF ステートメントを参照してください。
私がやりたいのは、キー「ハッシュマップから評価を取得し、それをintに変換し、ifステートメントを実行してドローアブルを設定する」ことです
public class CustomReviewListAdapter extends ArrayAdapter<HashMap<String, String>> {
private ArrayList<HashMap<String, String>> data;
private Context context;
private LayoutInflater mInflater;
private int viewId;
private String[] tag;
private static final String TAG_CONTENT = "content";
private static final String TAG_RATING = "rating";
private static final String TAG_USER_NAME = "user_name";
public CustomReviewListAdapter(Context c,
ArrayList<HashMap<String, String>> data,
int viewId, String[] tag) {
super(c, viewId, data );
this.context = c;
this.data= data;
this.viewId = viewId ;
}
@Override
public int getCount() {
return data.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
Holder holder;
if (convertView == null) {
// Inflate the view since it does not exist
if (vi == null) {
mInflater = (LayoutInflater)
getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = mInflater.inflate(R.layout.list_review_item_layout, null);
}
holder = new Holder();
holder.textView = (TextView) vi.findViewById(R.id.content);
holder.userName = (TextView) vi.findViewById(R.id.userName);
holder.imageView = (ImageView) vi.findViewById(R.id.num_stars);
vi.setTag(holder);
}else {
holder = (Holder) vi.getTag();
}
HashMap<String, String> currentData = new HashMap<String, String>();
currentData = data.get(position);
if (currentData != null) {
holder.textView.setText(currentData.get(TAG_CONTENT));
holder.userName.setText(currentData.get(TAG_USER_NAME));
//if(s == "5" ){
//holder.imageView.setImageResource(R.drawable.one_half);
//}else if(s == "4"){
//holder.imageView.setImageResource(R.drawable.two_stars);
//}else if(s == "1"){
//holder.imageView.setImageResource(R.drawable.three);
//}else if(s == "2"){
//holder.imageView.setImageResource(R.drawable.three_half);
//}else{
//holder.imageView.setImageResource(R.drawable.five_star);
//}
}
return vi;