Я пытаюсь вызвать высокий балл пользователей из базы данных 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);
}