[英]RatingBar display on ListView with ratings from Json parse
如何設置數據來自MySQL
數據庫的RatingBar的等級通過json傳遞,我不知道我在哪里做錯了,但是我可以設法顯示名稱,但是等級無法正常工作,例如名稱Sample評級為4.5,因此在輸出RatingBar
會將星級設置為4.5。
樣本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
}
現在這是我顯示它的代碼
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;
}
}
這是我的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>
您需要在listview
adapter
ratingBar
中設置ratings
。 在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.