gpt4 book ai didi

android - 如何从android中的json中获取数据并显示在RecyclerView中?

转载 作者:行者123 更新时间:2023-11-30 01:02:38 24 4
gpt4 key购买 nike

我正在制作一个 Android 应用程序以从 URL 获取 JSON 数据,然后将其显示在 RecyclerView 中。

我的 JSON 数据

[{"email":"abc@gmail.com","photo":"http:\/\/www.example.com\/x.jpg","bookname":"one""price":"30","num":"3","avg":"3.9","author":"none"}]

但只有 booknamephoto 键值正在获取。其他参数为空,但我的代码是正确的,因为如果它是错误的,甚至连 bookname 都不应该获取。

我的代码是:

public class dashBoard extends AppCompatActivity {


private List<myDash> dash;
private Toolbar mToolbar;
Button read;
//Creating Views
int temp=0;
float starts=0;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;
public String ratenumS,numberS;
public String bookName,price,rating;
private RequestQueue requestQueue;
String mail_one;

private int requestCount = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dash_bord);

recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);

//Initializing our superheroes list
dash = new ArrayList<>();
requestQueue = Volley.newRequestQueue(this);

getDash();

//Adding an scroll change listener to recyclerview
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);

getDash();
}
});

//initializing our adapter
adapter = new dashCard(dash, this);

//Adding adapter to recyclerview
recyclerView.setAdapter(adapter);


}


private JsonArrayRequest getDataFromDash(int requestCount) {
//Initializing ProgressBar
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar3);

//Displaying Progressbar
progressBar.setVisibility(View.VISIBLE);
setProgressBarIndeterminateVisibility(true);

SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(dashBoard.this);

mail_one = pre.getString("mail2", "DEFAULT VALUE");

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest("http://www.example.com/getDash.php?page="+ String.valueOf(requestCount )+"&email="+mail_one,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Calling method parseData to parse the json response
parseData(response);
//Hiding the progressbar
progressBar.setVisibility(View.GONE);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);



if(temp==0) {
Toast.makeText(dashBoard.this, "No More Items Available "+bookName+"book "+price+" "+ratenumS+" "+numberS+" "+mail_one, Toast.LENGTH_SHORT).show();
temp++;
}
}

}

//Returning the request
return jsonArrayRequest;
}

private void getDash() {
//Adding the method to the queue by calling the method getDataFromServer
requestQueue.add(getDataFromDash(requestCount));
//Incrementing the request counter
requestCount++;
}

//This method will parse json data
private void parseData(JSONArray array) {
for (int i = 0; i < array.length(); i++) {
myDash dash1 = new myDash();



JSONObject json = null;
try {
//Getting json
json = array.getJSONObject(i);

dash1.setImageUrl(json.getString("photo"));
dash1.setBook_name(json.getString("bookname"));
dash1.setNo_down(json.getString("download"));
dash1.setBook_price(json.getString("price"));
dash1.setStar_num(json.getString("num"));
dash1.setAvg_rate(Float.parseFloat(json.getString("avg")));


} catch (JSONException e) {
e.printStackTrace();
}
//Adding the superhero object to the list
dash.add(dash1);
}

//Notifying the adapter that data has been added or changed
adapter.notifyDataSetChanged();
}

有人知道为什么这段代码不起作用吗?

我的 dashCard Activity 。

public class dashCard extends RecyclerView.Adapter<dashCard.ViewHolder> {


private ImageLoader imageLoader;
private Context context;

//List to store all superheroes
List<myDash> secDash1;

//Constructor of this class
public dashCard(List<myDash> secDash1, Context context){
super();
//Getting all superheroes
this.secDash1 = secDash1;
this.context = context;
}

//In
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.dash_bord, parent, false);
ViewHolder viewHolder = new ViewHolder(v);

return viewHolder;

}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final myDash secDash = secDash1.get(position);



imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();

imageLoader.get(secDash.getImageUrl(),ImageLoader.getImageListener(holder.imageView, R.drawable.image, android.R.drawable.ic_dialog_alert));


holder.imageView.setImageUrl(secDash.getImageUrl(), imageLoader);
holder.bookName.setText(secDash.getBook_name());
holder.price.setText(secDash.getBook_price());
holder.numberD.setText(secDash.getStar_num());
//holder.rate.setText(Float.toString(secDash.getAvg_rate()));
holder.download.setText(secDash.getNo_down());
// holder.star.setRating(secDash.getAvg_rate());

}





public int getItemCount() {
return secDash1.size();
}

class ViewHolder extends RecyclerView.ViewHolder{
//Views
public NetworkImageView imageView;
public TextView bookName;
public TextView price;
public TextView numberD;
public TextView rate;
RatingBar star;
public TextView download;


//Initializing Views
public ViewHolder(View itemView) {
super(itemView);
imageView = (NetworkImageView) itemView.findViewById(R.id.dashImage);
bookName = (TextView) itemView.findViewById(R.id.bookName4);
price = (TextView) itemView.findViewById(R.id.priceDash);
numberD = (TextView) itemView.findViewById(R.id.numberDash);
rate = (TextView) itemView.findViewById(R.id.ratenumDash);
star = (RatingBar) itemView.findViewById(R.id.rateDash);
download = (TextView) itemView.findViewById(R.id.download);


}
}
}

最佳答案

我认为问题在:

dash1.setNo_down(json.getString("download"));

您的 json 尚未下载用于获取值的 key 。当代码运行到这一行时,发生异常,程序进入 catch block ,其他属性将永远不会被分配数据。我建议在获取其值之前检查 json key 是否存在。

关于android - 如何从android中的json中获取数据并显示在RecyclerView中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com