0

私はこの問題に数日間立ち往生しており、解決策が見えません。

私は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;
4

1 に答える 1

0

オブジェクトを type のマップに格納しMap<String, ?>て、ステートメントを作成できます。

map.put(TAG_RATING, Integer.parseInt(rating));

もう 1 つのトリックは、droidQueryライブラリを使用してすべてを簡素化することです。

Map<String, ?> map = $.map(r);//given r, your JSONObject
map.put(TAG_RATING, Integer.parseInt((String) map.remove(TAG_RATING));

最後に、コメントアウトされたコードを単純化するには、次のswitchステートメントを使用します。

switch(s) {
    case 5 :
        holder.imageView.setImageResource(R.drawable.one_half);
        break;
    case 4 :
        //etc
        break;
    default:
        break;
}
于 2013-08-06T21:42:24.140 に答える