我无法使用凌空库通过URL在Android应用程序的Gridview中显示JSON数据。我得到:
com.android.volley.NoConnectionError:java.io.IOException
来自https://reqres.in/api/users?page=%1 $ s
的JSON数据{
"page": 1,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
{
"id": 1,
"email": "george.bluth@reqres.in",
"first_name": "George",
"last_name": "Bluth",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
},
{
"id": 2,
"email": "janet.weaver@reqres.in",
"first_name": "Janet",
"last_name": "Weaver",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"
},
{
"id": 3,
"email": "emma.wong@reqres.in",
"first_name": "Emma",
"last_name": "Wong",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"
},
{
"id": 4,
"email": "eve.holt@reqres.in",
"first_name": "Eve",
"last_name": "Holt",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
},
{
"id": 5,
"email": "charles.morris@reqres.in",
"first_name": "Charles",
"last_name": "Morris",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"
},
{
"id": 6,
"email": "tracey.ramos@reqres.in",
"first_name": "Tracey",
"last_name": "Ramos",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"
}
],
{
"page": 1,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
{
"id": 1,
"email": "george.bluth@reqres.in",
"first_name": "George",
"last_name": "Bluth",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
},
{
"id": 2,
"email": "janet.weaver@reqres.in",
"first_name": "Janet",
"last_name": "Weaver",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"
},
{
"id": 3,
"email": "emma.wong@reqres.in",
"first_name": "Emma",
"last_name": "Wong",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"
},
{
"id": 4,
"email": "eve.holt@reqres.in",
"first_name": "Eve",
"last_name": "Holt",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
},
{
"id": 5,
"email": "charles.morris@reqres.in",
"first_name": "Charles",
"last_name": "Morris",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"
},
{
"id": 6,
"email": "tracey.ramos@reqres.in",
"first_name": "Tracey",
"last_name": "Ramos",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"
}
],
"ad": {
"company": "StatusCode Weekly",
"url": "http://statuscode.org/",
"text": "A weekly newsletter focusing on software development, infrastructure, the server,
performance, and the stack end of things."
}
}
MainActivity.java:
public class MainActivity extends AppCompatActivity {
Intent intent;
RequestQueue queue;
Activity activity;
Context context;
GridView gridView;
private Toolbar mToolbar;
ProductViewAdapter gridAdapter;
public ArrayList<Product> products = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product);
activity = this;
context = getApplicationContext();
String url = "https://reqres.in/api/users?page=%1$s";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
JSONObject results = jsonObject.getJSONObject("results");
JSONArray data = results.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject jo = data.getJSONObject(i);
int id = jo.getInt("id");
String first_name = jo.getString("first_name");
String last_name = jo.getString("last_name");
String avatar = jo.getString("product_image");
String email = jo.getString("email");
products.add(new Product(id, first_name, last_name, avatar, email));
}
} catch (JSONException e) {
e.printStackTrace();
}
GridView gridView = (GridView) findViewById(R.id.gridView);
gridAdapter = new ProductViewAdapter(MainActivity.this, R.layout.product_item_layout, products);
gridView.setAdapter(gridAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
}
});
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("Api Error", "Api Not working " + error);
}
});
// stringRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue = Volley.newRequestQueue(getApplicationContext());
queue.add(stringRequest);
}
}
ProductViewAdapter.java:
public class ProductViewAdapter extends ArrayAdapter {
private Context context;
private int layoutResourceId;
private ArrayList<Product> data = new ArrayList();
public ProductViewAdapter(Context context, int layoutResourceId, ArrayList data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.id = (TextView) row.findViewById(R.id.id);
holder.first_name = (TextView) row.findViewById(R.id.firstname);
holder.last_name = (TextView) row.findViewById(R.id.lastname);
holder.email = (TextView) row.findViewById(R.id.email);
holder.avatar = (ImageView) row.findViewById(R.id.image);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
//int loader = R.drawable.loader;
// Imageview to show
Product Productitem = data.get(position);
holder.id.setText(Productitem.getId());
holder.first_name.setText(Productitem.getFirst_name());
holder.first_name.setText(Productitem.getLast_name());
holder.email.setText(Productitem.getEmail());
String image_url = Productitem.getAvatar();
Picasso.with(this.context)
.load(image_url)
.into(holder.avatar);
return row;
}
static class ViewHolder {
public TextView id;
public TextView first_name;
public TextView last_name;
public TextView email;
public ImageView avatar;
}
}
Product.java:
public class Product implements Serializable {
private int id;
private String email;
private String first_name;
private String last_name;
private String avatar;
public Product(int id, String email, String first_name, String last_name, String avatar) {
this.id = id;
this.email = email;
this.first_name = first_name;
this.last_name = last_name;
this.avatar = avatar;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
}
product_item_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:orientation="vertical"
android:padding="5dp"
android:paddingTop="20dp">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:adjustViewBounds="true"/>
<TextView
android:id="@+id/firstname"
android:layout_width="match_parent"
android:textAllCaps="false"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textAlignment="center"
android:gravity="center"
android:textSize="25sp"/>
<TextView
android:id="@+id/lastname"
android:layout_width="match_parent"
android:textAllCaps="false"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textAlignment="center"
android:gravity="center"
android:textSize="25sp"/>
<TextView
android:id="@+id/email"
android:layout_width="match_parent"
android:textAllCaps="false"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textAlignment="center"
android:gravity="center"/>
<!-- we keep the product id invisible, this if for reference only -->
<TextView
android:id="@+id/id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:gravity="center"
android:textSize="0dp"
android:visibility="invisible"/>
</LinearLayout>
在我添加的依赖项下面:
implementation "com.squareup.picasso:picasso:2.4.0"
//implementation 'com.android.volley:volley:2.0.0'
implementation 'com.mcxiaoke.volley:library:1.0.19'
我已在清单文件中授予以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
答案 0 :(得分:0)
JSONObject results = jsonObject.getJSONObject("results");
在您提到的链接中看不到任何对象结果。尝试删除此行。
此外,如果要将字符串响应转换为JSON对象,则最好使用JSONObjectresponse。如果使用此方法,则无需将字符串响应转换为JSON对象。
这是一个可能会帮助您的问题。