Как заполнить данные JSON из AsyncTask в представлении переработчика - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь вызвать высокий балл пользователей из базы данных MySQL в мое приложение для Android в формате json, используя AsyncTask.

Ранее я вызывал эти данные по отдельности на отдельных страницах, и они отлично работали, но сейчас я пытаюсь разместить их все в массиве для отображения на странице просмотра одного переработчика

Но как я могу отобразить данные в массиве представления переработчика

Буду признателен за полезные советы. ура!

Вот мой фрагмент

     public AllTimeTopScoreFragment() {
            }


            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                View view = inflater.inflate(R.layout.fragment_all_time_top_score, container, false);
                mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
                mRecyclerView.setHasFixedSize(true);
                mLayoutManager = new GridLayoutManager(getActivity(), 3);
                mRecyclerView.setLayoutManager(mLayoutManager);
 mAdapter = new LeaderBoardAdapter(getDataSet()); //I cant correctly pass the data here
                mRecyclerView.setAdapter(mAdapter);
                RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL);
                mRecyclerView.addItemDecoration(itemDecoration);
                name = view.findViewById(R.id.profileName);
                score = view.findViewById(R.id.profileScore);
                return view;
            }

        //    private ArrayList<LeaderProfile> getDataSet() {
        //        ArrayList results = new ArrayList<>();
        //        for (int index = 0; index < 20; index++) {
        //            LeaderProfile obj = new LeaderProfile(R.drawable.avatar, "Name " + index, 10 + index);
        //            results.add(index, obj);
        //        }
        //        return results;
        //    }


            private class AsyncJsonObject extends AsyncTask<String, Void, String> {

                private ProgressDialog progressDialog;

                @Override
                protected String doInBackground(String... params) {

                    HttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());
                    HttpPost httpPost = new HttpPost("https://url");
                    String jsonResult = "";

                    try {
                        HttpResponse response = httpClient.execute(httpPost);
                        jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
                        System.out.println("Returned Json object " + jsonResult.toString());

                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return jsonResult;
                }
                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();
                    progressDialog = ProgressDialog.show(getContext(), "Downloading Questions","Please Wait....", true);
                }

                @Override
                protected void onPostExecute(String result) {
                    super.onPostExecute(result);
                    progressDialog.dismiss();
                    System.out.println("Resulted Value: " + result);
                    parsedObject = returnParsedJsonObject(result);
                    if(parsedObject == null){
                        return;
                    }


                    quizCount = parsedObject.size();
                    firstAllTimeEarner = parsedObject.get(0);
                    name.setText(firstAllTimeEarner.getUsername());
                    score.setText(firstAllTimeEarner.getEarnings());
        //            Picasso.with(getApplicationContext())
        //                    .load(firstQuestion.getPicture())
        ////                    .placeholder(R.drawable.placeholder)
        ////                    .resize(imgWidth, imgHeight)
        ////                    .centerCrop()
        //                    .into(mImageView);
        //            mButtonChoice1.setText(firstQuestion.getOption1());
        //            mButtonChoice2.setText(firstQuestion.getOption2());
        //            mButtonChoice3.setText(firstQuestion.getOption3());
        //            mButtonChoice4.setText(firstQuestion.getOption4());



                }

                private StringBuilder inputStreamToString(InputStream is) {
                    String rLine = "";
                    StringBuilder answer = new StringBuilder();
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));

                    try {
                        while ((rLine = br.readLine()) != null) {
                            answer.append(rLine);
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    return answer;
                }
            }
            private ArrayList<LeaderProfile> returnParsedJsonObject(String result){

                ArrayList<LeaderProfile> jsonObject = new ArrayList<>();
                JSONObject resultObject = null;
                JSONArray jsonArray = null;
                LeaderProfile newItemObject = null;

                try {
                    resultObject = new JSONObject(result);
                    System.out.println("Testing the water " + resultObject.toString());
                    jsonArray = resultObject.optJSONArray("all_time_earners");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                if (jsonArray != null) {     // check jsonArray is null?
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonChildNode = null;
                        try {
                            jsonChildNode = jsonArray.getJSONObject(i);
                            int id = jsonChildNode.getInt("id");
                            String username = jsonChildNode.getString("username");
                            int earnings = jsonChildNode.getInt("earnings");
                            newItemObject = new LeaderProfile(id, username, earnings);
                            jsonObject.add(newItemObject);
                        }
                        catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    return jsonObject;
                }
                return jsonObject;
            }

Вот мой адаптер Leaderboard, а также

public class LeaderBoardAdapter extends RecyclerView.Adapter<LeaderBoardAdapter.DataObjectHolder> {

    private static String TAG = LeaderBoardAdapter.class.getSimpleName();
    private ArrayList<LeaderProfile> mDataset;
    private static MyClickListener myClickListener;


    public static class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView name;
        TextView score;
        ImageView image;

        public DataObjectHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.profileName);
            score = (TextView) itemView.findViewById(R.id.profileScore);
            image = (ImageView) itemView.findViewById(R.id.profileImage);
            Log.i(LOG_TAG, "Adding Listener");
            itemView.setOnClickListener(this);
        }

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

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

    public LeaderBoardAdapter(ArrayList<LeaderProfile> myDataset) {
        mDataset = myDataset;
    }

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


    @Override
    public void onBindViewHolder(DataObjectHolder holder, int position) {
        holder.name.setText(mDataset.get(position).getUsername());
        holder.score.setText(String.valueOf(mDataset.get(position).getEarnings()) + " points");
//        holder.image.setImageResource(mDataset.get(position).getImage());
    }


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

    public interface MyClickListener {
        public void onItemClick(int position, View v);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...