当前位置: 首页 > 知识库问答 >
问题:

Android Studio中Recyclerview中的JSON数据解析

庄欣然
2023-03-14

所以基本上我使用的是Google的Places API,我想要从JSON到我的回收器视图的特定数据。我试着用凌空抽射,但它给了我一个空白屏幕或不断崩溃。所以有人能帮助我如何获得数据并显示具体的数据吗…这是我尝试的代码

LoadPlacesActivity.java

public class LoadPlacesActivity extends AppCompatActivity {
ActivityLoadPlacesBinding binding;
private PlacesAdapter placesAdapter;
FirebaseAuth auth;
FirebaseDatabase database;
double lat, lon;
String url;
public static ArrayList<Places> placeList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    binding = ActivityLoadPlacesBinding.inflate(getLayoutInflater());
    super.onCreate(savedInstanceState);
    auth = FirebaseAuth.getInstance();
    database = FirebaseDatabase.getInstance();
    setContentView(binding.getRoot());
    binding.loadPlaces.setLayoutManager(new LinearLayoutManager(this));
    binding.loadPlaces.setHasFixedSize(true);

    database.getReference("Users").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            lat = Double.parseDouble("" + snapshot.child(auth.getCurrentUser().getUid()).child("Latitude").getValue());
            lon = Double.parseDouble("" + snapshot.child(auth.getCurrentUser().getUid()).child("Longitude").getValue());
            url = ("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=" + lat + "," + lon + "&radius=10000&type=bank&key=" + R.string.google_api_key);
            getPlacesData();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

private void getPlacesData() {
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            for (int i=0;i<response.length();i++){
                try {
                    JSONObject obj=response.getJSONObject(i);
                    Places places=new Places();
                    places.setName(obj.getJSONObject("results").getString("name"));
                    placeList.add(places);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            placesAdapter = new PlacesAdapter(LoadPlacesActivity.this, placeList);
            binding.loadPlaces.setAdapter(placesAdapter);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }
    );
    requestQueue.add(jsonArrayRequest);
}
public class PlacesAdapter extends RecyclerView.Adapter<PlacesAdapter.ViewHolder> {

ArrayList<Places> places;
Context con;

public PlacesAdapter(Context context,ArrayList<Places>places) {
    super();
    this.con = context;
    this.places=places;
}


@NonNull
@Override
public PlacesAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemsView = LayoutInflater
            .from(parent.getContext())
            .inflate(R.layout.places_cards, parent, false);

    return new ViewHolder(itemsView);
}

@Override
public void onBindViewHolder(@NonNull PlacesAdapter.ViewHolder holder, int position) {
    Places model = places.get(position);
    holder.name.setText(model.getName());
}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView pl_image;
    TextView name;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        pl_image = itemView.findViewById(R.id.pl_image);
        name = itemView.findViewById(R.id.names);
    }
}

places.java

public class Places {
private String name;
private String category;
private String rating;
private String opennow;
private String vicinity;
private double latitude,longitude;
public Places()
{
    this.name="";
    this.category="";
    this.rating="";
    this.opennow="";
    this.vicinity="";
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getCategory() {
    return category;
}
public void setCategory(String category) {
    this.category = category;
}
public String getRating() {
    return rating;
}
public void setRating(String rating) {
    this.rating = rating;
}
public String getOpen() {
    return opennow;
}
public void setOpenNow(String open) {
    this.opennow = open;
}
public String getVicinity() {
    return vicinity;
}
public void setVicinity(String vicinity) {
    this.vicinity = vicinity;
}
public void setLatLng(double lat,double lon)
{
    this.latitude=lat;
    this.longitude=lon;
}

}这是logcat的截图

共有1个答案

张鸿宝
2023-03-14

问题似乎出在您使用的URL上,我尝试了浏览器中的URL,得到的响应是:“error_message”:“提供的API密钥无效。”因此,我认为这就是您的代码转到onerrorResponse块的原因。因此,没有调用setadapter,您将面临未附加适配器的崩溃。检查代码中r.string.google_api_key的值,它似乎是错误的。

 类似资料:
  • 我正在尝试从AndroidStudio中的JSON文件中读取数据,格式如下: 我想有对象包含int,String,String(每行的新对象)。有人知道怎么写吗?

  • 问题内容: 我是Jquery,Ajax和JSON的新手。我在解析Json数据时遇到问题。我在Stackoverflow上遇到了很多问题 解析HTML表的JSON对象 访问/处理(嵌套的)对象,数组或JSON 在JavaScript中解析JSON? 如何在JQuery中解析此JSON对象? 还有很多… 我仍然无法解析Json数据。 我的Jquery看起来像: 我已经尝试了所有组合来解析此数据,但是j

  • 本文向大家介绍JavaScript中解析JSON数据的三种方法,包括了JavaScript中解析JSON数据的三种方法的使用技巧和注意事项,需要的朋友参考一下 概述 现在JSON格式在web开发中越来越受重视,特别是在使用ajax开发项目的过程中,经常需要将json格式的字符串返回到前端,前端解析成JS对象(JSON )。 ECMA-262(E3)中没有将JSON概念写到标准中,还好在 ECMA-

  • 问题内容: 我在Angular中显示JSON数据时遇到麻烦。我已成功将数据从后端发送到前端(角度),但无法显示它们。 我已经尝试在JSFiddle上模拟类似的情况,尽管我已经从后端准备了数据 获取/发送数据->后端: 获取数据->前端(角度) 带有ng-repeat指令的HTML部分: 谁知道是什么问题吗? 问题答案: 据我所知,您将对象存储为JSON,但从未对其进行解析。因此使用 代替 应该解决

  • 问题内容: 我已经来了一段时间,感觉好像logstash中的JSON过滤器正在为我删除数据。我最初是从https://www.digitalocean.com/community/tutorials/how- to-install-elasticsearch-logstash-and-kibana-elk-stack-on- ubuntu-14-04 跟随该教程的 我进行了一些更改,但基本相同。我

  • 我从服务器获得一个Json对象,该Json对象包含两个Json数组。我知道如何将数据放入json数组中的recyclerview。但我不知道如何将两个json数组数据放入recyclerview。其中一个Json数组包含rep、name和name1。这里的name表示name1的id(codeID)。下一个数组包含customer(codeID)和coll(name和customer相同)。我使用