【发布时间】:2018-10-09 17:22:07
【问题描述】:
我有问题。我从我的 PHP 脚本下载 JSON:
[{
"Nazwa": "Rower",
"Cena": "300"
}, {
"Nazwa": "Rower mtb",
"Cena": "350"
}]
此脚本下载 JSON:
public class MainActivity extends AppCompatActivity
{
public List<Post> postList;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view)
{
EditText editText = findViewById(R.id.editText);
final String name = editText.getText().toString();
RequestQueue requestQueue = Volley.newRequestQueue(this);
String URL = "https://shoppingcentreeshop.000webhostapp.com/androidAppScripts/szukajProduk tu.php";
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
Log.v(TAG, response);
Gson gson = new Gson();
Type type = new TypeToken<List<Post>>(){}.getType();
postList = gson.fromJson(response, type);
int size = postList.size();
Log.v(TAG, "SIZE = "+size);
RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(MainActivity.this, postList);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
recyclerView.setAdapter(recyclerViewAdapter);
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
Log.e(TAG, error.toString());
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
Map<String, String> params = new HashMap<String, String> ();
params.put("name_product", name);
return params;
}
};
requestQueue.add(stringRequest);
}
}
我使用 GSON 将其解析为此类:
public class Post
{
@SerializedName("Nazwa")
@Expose
private String nazwa;
@SerializedName("Cena")
@Expose
private String cena;
//getters and setters
}
我将 postList 添加到 RecyclerViewAdapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>
{
List<Post> listPost;
Context context;
public RecyclerViewAdapter(Context mContext, List<Post> list)
{
context = mContext;
listPost = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_item_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position)
{
final Post post = listPost.get(position);
holder.title.setText(post.getCena());
holder.price.setText(post.getCena());
}
@Override
public int getItemCount()
{
return listPost.size();
}
public class ViewHolder extends RecyclerView.ViewHolder
{
TextView title;
TextView price;
public ViewHolder(View itemView)
{
super(itemView);
title = itemView.findViewById(R.id.titleNazwa);
price = itemView.findViewById(R.id.price);
}
}
}
为什么在我的回收站视图中我只有 postList 中第一个索引中的文本。
我知道,有很多代码,但我不知道代码哪里有问题。
我第一次使用 JSON 从服务器获取数据到 RecyclerView 所以请多多包涵
【问题讨论】:
-
Log.v打印的尺寸是否正确?你能附上recycler_view_item_layout和activity_main吗?
标签: android json android-recyclerview