0

I want display Review text and its Rating in another activity.

Here is my AddReview class

public class AddReview extends AppCompatActivity implements ServerRequests.AddReviewreponse {
    private Button submit;
    EditText addReview;
    RatingBar ratingBar;
    Toolbar toolbar;

    ServerRequests serverRequests;
    JSONParser jsonParser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_review);

        jsonParser = new JSONParser();
        serverRequests = new ServerRequests(getApplicationContext());
        serverRequests.setAddReviewreponse(this);


        addReview=(EditText)findViewById(R.id.reviewBox);
        ratingBar=(RatingBar) findViewById(R.id.ratingBar);

        submit=(Button)findViewById(R.id.submit);
        toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar_top);

        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Add Review");


       // toolbar.setNavigationIcon(R.drawable.back_30);

      /*  toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });*/



       submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {

                    String ReviewTxt = addReview.getText().toString();
                    float rating = ratingBar.getRating();

                    JSONObject obj = jsonParser.makeAddReviewJson(1,1,ReviewTxt,rating);
                    Log.e("final Json", obj.toString());
                    serverRequests.addReview(obj);

                } catch (Exception e) {

                }


               /* Reviews.displayName.setText(RegisterActivity.name.getText().toString());

                Reviews.displayReview.setText("Your Review : "+addReview.getText().toString());

                Reviews.displayStars.setRating(ratingBar.getRating());*/

               /* Reviews.displayStars.setText("Your Rating : " + ratingBar.getRating());
                String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
                Reviews.displayDate.setText(currentDateTimeString);*/


                AlertDialog alertDialog = new AlertDialog.Builder(AddReview.this).create();

                alertDialog.setTitle("Review Submitted!");

                alertDialog.setMessage("Thanks for your valueable review!");

                alertDialog.setIcon(R.drawable.star_48);

                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Write your code here to execute after dialog closed
                        Toast.makeText(getApplicationContext(), "You clicked on OK", Toast.LENGTH_SHORT).show();
                    //    startActivity(new Intent(getApplicationContext(), Reviews.class));
                    }
                });

                // Showing Alert Message
                alertDialog.show();

            }
        });
    }

    @Override
    public void onAddReviewReposne(JSONObject object) {

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId()==android.R.id.home)
        {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}

This is the Review class where I want to display the review and its ratings

public class Reviews extends AppCompatActivity implements ServerRequests.GetReviewResponse {

    public static TextView displayReview, displayDate, displayName;
    public static RatingBar displayStars;
    Button addReviewBtn;
    android.support.v7.widget.Toolbar toolbar;

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    private static String LOG_TAG = "CardViewActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reviews);

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view1);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
    //    mAdapter = new ReviewAdapter(getDataSet(jsonObject));
        mRecyclerView.setAdapter(mAdapter);


        toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar_top1);

        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Reviews");


        /*displayReview = (TextView) findViewById(R.id.review);
        displayStars = (RatingBar) findViewById(R.id.rating);
        displayDate = (TextView)findViewById(R.id.displayDate);
        displayName = (TextView)findViewById(R.id.displayName);*/

       addReviewBtn = (Button)findViewById(R.id.addReviewBtn);
        addReviewBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getApplicationContext(), AddReview.class));
            }
        });

        ServerRequests serverRequests=new ServerRequests(getApplicationContext());
        serverRequests.setReviewResponse(this);
        serverRequests.getReviews("one");

    }


    private ArrayList<Review> getDataSet(JSONArray array) {
        ArrayList results = new ArrayList<Review>();
        for (int i = 0; i < array.length(); i++) {
            try {
                JSONObject object = array.getJSONObject(i);
                Review obj = new Review(object.getInt("reviewId"),object.getInt("userId"),object.getString("Name"),object.getString("Review"),object.getLong("rating"));
                results.add(i,obj);

            }
            catch (Exception e){
                e.printStackTrace();
            }

        }
        return results;
    }


    @Override
    public void onGetReviewResponse(JSONArray jsonObject) {

        mAdapter = new ReviewAdapter(getDataSet(jsonObject));
        mRecyclerView.setAdapter(mAdapter);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId()==android.R.id.home)
        {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}

This is the ReviewAdapter

public class ReviewAdapter extends RecyclerView.Adapter<ReviewAdapter.DataObjectHolder> {
    private static String LOG_TAG = "MyRecyclerViewAdapter";
    private ArrayList<Review> mDataset;
    private static MyClickListener myClickListener;

    public static class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public static TextView name,review;
        public static RatingBar rating;

        public DataObjectHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.name);
            review = (TextView) itemView.findViewById(R.id.review);
            rating = (RatingBar) itemView.findViewById(R.id.rating);
            Log.i(LOG_TAG, "Adding Listener");
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            myClickListener.onItemClick(getAdapterPosition(), v);
        }
    }

    public void setOnItemClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }

    public ReviewAdapter(ArrayList<Review> myDataset) {
        mDataset = myDataset;
    }

    @Override
    public DataObjectHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_view_review, parent, false);

        DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
        return dataObjectHolder;
    }

    @Override
    public void onBindViewHolder(DataObjectHolder holder, int position) {
        holder.name.setText(mDataset.get(position).getName());
        holder.review.setText(mDataset.get(position).getReview());
        holder.rating.setRating(mDataset.get(position).getRating());
    }

    public void addItem(Review dataObj, int index) {
        mDataset.add(index, dataObj);
        notifyItemInserted(index);
    }

    public void deleteItem(int index) {
        mDataset.remove(index);
        notifyItemRemoved(index);
    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }

    public interface MyClickListener {
        public void onItemClick(int position, View v);
    }
}

This is the Pojo class of Review

public class Review {
    private String name,review;
    private float rating;
    private int reviewId,userId;

    public Review (int ReviewId, int UserId, String Name, String Review, float Rating){
        reviewId = ReviewId;
        userId = UserId;
        name = Name;
        review = Review;
        rating = Rating;

    }

    public int getReviewId() {
        return reviewId;
    }

    public void setReviewId(int reviewId) {
        this.reviewId = reviewId;
    }


    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getReview() {
        return review;
    }

    public void setReview(String review) {
        this.review = review;
    }

    public float getRating() {
        return rating;
    }

    public void setRating(float rating) {
        this.rating = rating;
    }


}

This is the ServerRequests for add and get Review

 //------------For add review------------------------------

    public void setAddReviewreponse(AddReviewreponse addreviewreponse) {
        this.addreviewreponse = addreviewreponse;
    }

    private AddReviewreponse addreviewreponse;

    public interface AddReviewreponse {
        void onAddReviewReposne(JSONObject object);
    }

    public void addReview(JSONObject jsonObject) {


        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, Services.ADD_REVIEW, jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            Log.e("Json response", "" + response);
                            boolean b = response.getBoolean("success");

                            if (addreviewreponse != null) {
                                addreviewreponse.onAddReviewReposne(response);

                            }

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("Error ", "" + error);
                    }
                }
        );

        queue.add(jsonObjectRequest);
    }

    //------------For get review------------------------------

    public void setReviewResponse(GetReviewResponse reviewResponse) {
        this.getReviewResponse = reviewResponse;
    }

    public GetReviewResponse getReviewResponse;

    public interface GetReviewResponse {
        void onGetReviewResponse(JSONArray jsonObject);
    }

    public void getReviews(final String id) {

        StringRequest request = new StringRequest(Request.Method.GET, Services.GET_REVIEW,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONArray array = new JSONArray(response);
                            Log.e("Server response", response);
                            if (array.length() > 0) {
                                if (getReviewResponse != null) {
                                    getReviewResponse.onGetReviewResponse(array);
                                }

                            } else {
                                Log.e("Error is occured", "asd");

                            }


                        } catch (Exception e) {

                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //send error repsonse back to user
                Log.e("Error: ", error.getMessage());

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> params = new HashMap<>();
                params.put("courseId", id);
                return params;

            }
        };
        queue.add(request);
    }

This is JSONParser class for AddReview

 //--------For Add review---------------------------------

    public JSONObject makeAddReviewJson(int studentID, int courseID, String reviewTxt, float rating) throws JSONException {

        JSONObject object = new JSONObject();

        object.put("studentId", studentID);
        object.put("courseId", courseID);
        object.put("review", reviewTxt);
        object.put("ratings", rating);
        return object;
    }

This is the JSON response I am getting after posting the Review

E/final Json: {"studentId":1,"courseId":1,"review":"Hellooooo","ratings":3}
E/Json response: {"success":true,"msg":"Your review has been added successfully","data":{"reviewsId":18}}
Sallu
  • 141
  • 3
  • 17
  • So what is the problem? any error? where you want help? which code is not working? – Zaki Pathan Mar 08 '17 at 10:08
  • @ZakiPathan I am not getting any error. I just want to display Review Text and Rating in Reviews.class activity. Reviews and Ratings are getting added from AddReview.class but not displayed. – Sallu Mar 08 '17 at 10:16
  • check my answer below – Zaki Pathan Mar 08 '17 at 10:29
  • @ZakiPathan can you help me on this question? http://stackoverflow.com/questions/42782886/i-want-to-store-register-and-login-information-in-shared-preferences-in-android – Sallu Mar 14 '17 at 10:08

1 Answers1

1
private ArrayList<Review> getDataSet(JSONArray array) {
        ArrayList results = new ArrayList<Review>();
        for (int i = 0; i < array.length(); i++) {
            try {
                JSONObject object = array.getJSONObject(i);
                Review obj = new Review(object.getInt("studentId"),object.getInt("courseId"),object.getString("Review"),object.getLong("rating"));
                results.add(i,obj);

            }
            catch (Exception e){
                e.printStackTrace();
            }

        }
        return results;
    }

try to change your getDataSet function with above code and check with debug point if you get any problem in some line. feel free to ask further will help you

EDIT:

You need to change your Pojo class of Review also. Because in JSON response you are not getting userId and reviewId. Hope you understand

Zaki Pathan
  • 1,762
  • 1
  • 13
  • 26
  • Thanks it helped..was doing a silly mistake! But I have one concern now, when I scroll the reviews displayed the reviews on the card are changing automatically, I dont know why – Sallu Mar 08 '17 at 11:53
  • debug and check how many time setAdapter is calling or you have problem in adpater. please debug and check – Zaki Pathan Mar 08 '17 at 11:55
  • also try using holder.setIsRecyclable(false); in onBindViewHolder after setting all data – Zaki Pathan Mar 08 '17 at 12:02