简体   繁体   English

ListView上显示的RatingBar具有来自Json parse的评级

[英]RatingBar display on ListView with ratings from Json parse

How to set the ratings of RatingBar that the data are from MySQL database pass by json, I don't know where I am doing wrong but I can manage to display the name, but the ratings is not functioning, for example in the name Sample have a rating of 4.5 so in the output RatingBar will set the star in a value of 4.5. 如何设置数据来自MySQL数据库的RatingBar的等级通过json传递,我不知道我在哪里做错了,但是我可以设法显示名称,但是等级无法正常工作,例如名称Sample评级为4.5,因此在输出RatingBar会将星级设置为4.5。

样品设计

Sample Json Data: 样本Json数据:

{
"item": [
    {
        "id": "1",
        "name": "Sample",
        "description": "Sample",
        "ratings": "4.5"
    },
    {
        "id": "2",
        "name": "Sample1",
        "description": "Sample1",
        "ratings": "1.5"
    },
    {
        "id": "3",
        "name": "Wow Magic",
        "description": "Amazing",
        "ratings": "4"
    },
    {
        "id": "4",
        "name": "Capstone with ROS",
        "description": "Amazing diba",
        "ratings": "5"
    },
    {
        "id": "5",
        "name": "asdasdasdasdasasdasdasdasdasdasdasdasdasd",
        "description": "asdas",
        "ratings": "3"
    }
],
"success": 1
}

Now this is my code for displaying it 现在这是我显示它的代码

public class ItemFragment extends Fragment {

private String TAG = ItemFragment.class.getSimpleName();
private ListView mListView;

RatingBar ratess;


ArrayList<HashMap<String, String>> itemList;


public static ItemFragment newInstance() {
    ItemFragment fragment = new ItemFragment();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

private void findViews(View view)
{

    itemList = new ArrayList<>();
    mListView = (ListView) view.findViewById(R.id.listView);
    new GetItems().execute();
}

private class GetItems extends AsyncTask<Void, Void, Void>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Toast.makeText(getActivity(), "Retrieving data", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        HttpHandler sh = new HttpHandler();

        String url = "http://10.20.18.204/FindForMe/show.php";
        String jsonStr = sh.makeServiceCall(url);

        Log.e(TAG, "Response from url: " + jsonStr);
        if (jsonStr != null){
            try {
                JSONObject jsonObj =  new JSONObject(jsonStr);

                JSONArray items = jsonObj.getJSONArray("item");

                for (int i = 0; i < items.length(); i++){
                    JSONObject c = items.getJSONObject(i);
                    String id = c.getString("id");
                    String title = c.getString("name");
                    String description = c.getString("description");
                    String ratings = c.getString("ratings");

                    HashMap<String, String> itemm = new HashMap<>();

                    itemm.put("id",id);
                    itemm.put("name", title);
                    itemm.put("description", description);
                    itemm.put("ratings", ratings);

                    itemList.add(itemm);
                }
            }
            catch (final JSONException e){
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getActivity(),
                                "Json parsing error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                });
            }
        }
        else {
            Log.e(TAG, "Couldn't get json from server.");
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getActivity(),
                            "Couldn't get json from server. Check LogCat for possible errors!",
                            Toast.LENGTH_LONG).show();
                }
            });
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        ListAdapter adapter = new SimpleAdapter(getActivity(), itemList, R.layout.customlayout, new String[]{"name","ratings"}, new int[]{R.id.item_title,R.id.ratings});
        mListView.setAdapter(adapter);
    }
}

View myView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    myView = inflater.inflate(R.layout.fragment_item, container, false);
    findViews(myView);
    return myView;


}
}

This is my layour xml file: 这是我的layour xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">


    <ImageView
        android:layout_width="120dp"
        android:layout_height="120dp"
        app:srcCompat="@mipmap/ic_launcher"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="10dp"
        android:id="@+id/imageViewer"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="20dp"/>

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_marginLeft="19dp"
        android:layout_marginStart="19dp"
        android:layout_alignTop="@+id/imageViewer"
        android:layout_toRightOf="@+id/imageViewer"
        android:layout_toEndOf="@+id/imageViewer"
        android:id="@+id/item_title"/>

<ImageView
    android:id="@+id/imageView"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_alignLeft="@+id/item_title"
    android:layout_alignStart="@+id/item_title"
    android:layout_below="@+id/item_title"
    app:srcCompat="@drawable/location2" />

<RatingBar

    android:id="@+id/ratings"
    style="@android:style/Widget.Holo.RatingBar.Indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView"
    android:layout_alignStart="@+id/imageView"
    android:layout_below="@+id/imageView"
    android:layout_marginTop="7dp"
    android:numStars="5"
    android:stepSize=".5"/>

    </RelativeLayout>

You need to set your ratings in ratingBar in listview adapter . 您需要在listview adapter ratingBar中设置ratings In your adapter's getView() method: adapter's getView()方法中:

     @NonNull
    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent)
     {
    viewHolder.ratess= (RatingBar) convertView.findViewById(R.id.ratess);
     viewHolder.ratess.setRating(yourModel.getRatingValue());

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM