Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JsonArrayRequest中使用JsonObjectRequest_Java_Android_Json_Android Volley - Fatal编程技术网

Java 在JsonArrayRequest中使用JsonObjectRequest

Java 在JsonArrayRequest中使用JsonObjectRequest,java,android,json,android-volley,Java,Android,Json,Android Volley,这里的新手,我正在开发一个简单的应用程序,它根据我的作业的api数据显示位置列表 我计划制作一个简单的recyclerview,显示预览图像、地名和地名等级 下面是包含对象数组的json [ { "xid":"N2180835380", "name":"Stasiun Waytuba", "rate":3, "osm":&q

这里的新手,我正在开发一个简单的应用程序,它根据我的作业的api数据显示位置列表

我计划制作一个简单的recyclerview,显示预览图像、地名和地名等级

下面是包含对象数组的json

[
   {
      "xid":"N2180835380",
      "name":"Stasiun Waytuba",
      "rate":3,
      "osm":"node/2180835380",
      "wikidata":"Q19741325",
      "kinds":"industrial_facilities,railway_stations,interesting_places",
      "point":{
         "lon":104.411728,
         "lat":-4.379512
      }
   },
   {
      "xid":"N5374585862",
      "name":"Stasiun Martapura",
      "rate":3,
      "osm":"node/5374585862",
      "wikidata":"Q19741099",
      "kinds":"other,unclassified_objects,interesting_places,tourist_object",
      "point":{
         "lon":104.346565,
         "lat":-4.316566
      }
   },
   {
      ...
   }
]
但是,图像url不存在于该json上,而是存在于另一个json上,该json是特定项的详细信息

{
   "xid":"N2180835380",
   "name":"Stasiun Waytuba",
   "address":{
      "state":"Lampung",
      "country":"Indonesia",
      "village":"Way Tuba",
      "postcode":"34767",
      "country_code":"id"
   },
   "rate":"3",
   "osm":"node/2180835380",
   "wikidata":"Q19741325",
   "kinds":"industrial_facilities,railway_stations,interesting_places",
   "sources":{
      "geometry":"osm",
      "attributes":[
         "osm",
         "wikidata"
      ]
   },
   "otm":"https://opentripmap.com/en/card/N2180835380",
   "wikipedia":"https://id.wikipedia.org/wiki/Stasiun%20Way%20Tuba",
   "image":"https://commons.wikimedia.org/wiki/File:Stasiun_Waytuba_08-2015.jpg",
   "preview":{
      "source":"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Stasiun_Waytuba_08-2015.jpg/400px-Stasiun_Waytuba_08-2015.jpg",
      "height":293,
      "width":400
   },
   "wikipedia_extracts":{
      "title":"id:Stasiun Way Tuba",
      "text":"Stasiun Way Tuba (WAY) adalah stasiun kereta api kelas II yang berada di Way Tuba, Way Tuba, Way Kanan. Stasiun yang terletak pada ketinggian +81 meter ini termasuk ke dalam Divisi Regional IV Tanjungkarang. Stasiun ini mempunyai 2 jalur rel dengan jalur 2 merupakan sepur lurus.Semua perjalanan kereta api yang melayani rute Kertapati–Tanjungkarang pasti berhenti di stasiun ini.",
      "html":"<p><b>Stasiun Way Tuba</b> (<b>WAY</b>) adalah stasiun kereta api kelas II yang berada di Way Tuba, Way Tuba, Way Kanan. Stasiun yang terletak pada ketinggian +81 meter ini termasuk ke dalam Divisi Regional IV Tanjungkarang. Stasiun ini mempunyai 2 jalur rel dengan jalur 2 merupakan sepur lurus.</p><p>Semua perjalanan kereta api yang melayani rute Kertapati–Tanjungkarang pasti berhenti di stasiun ini.</p>"
   },
   "point":{
      "lon":104.411728,
      "lat":-4.379512
   }
}
{
“xid”:“N2180835380”,
“名称”:“Stasiun Waytuba”,
“地址”:{
“州”:“兰榜”,
“国家”:“印度尼西亚”,
“村庄”:“路大号”,
“邮政编码”:“34767”,
“国家/地区代码”:“id”
},
“费率”:“3”,
“osm”:“节点/2180835380”,
“维基数据”:“Q19741325”,
“种类”:“工业设施、火车站、名胜”,
“资料来源”:{
“几何”:“osm”,
“属性”:[
“osm”,
“维基数据”
]
},
“otm”:https://opentripmap.com/en/card/N2180835380",
“维基百科”:https://id.wikipedia.org/wiki/Stasiun%20Way%20Tuba",
“图像”:https://commons.wikimedia.org/wiki/File:Stasiun_Waytuba_08-2015.jpg“,
“预览”:{
“来源”:https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Stasiun_Waytuba_08-2015.jpg/400px-Stasiun_Waytuba_08-2015.jpg",
“高度”:293,
“宽度”:400
},
“维基百科摘录”:{
“标题”:“id:Stasiun Way Tuba”,
“文本”:“斯塔森路大号(路)第二阶段是图巴、图巴、卡南地区。第四阶段是第四区域。第二阶段是第二阶段。第二阶段是第二阶段。第二阶段是第二阶段。第三阶段是第二阶段。第二阶段是第二阶段。第三阶段是第三阶段,第四阶段是第四区域。第二阶段是第二阶段是第二阶段。第二阶段是第二阶段是第三阶段。第三阶段是第三阶段,第三阶段是第三阶段",,
“html”:“Stasiun路大号(路)第二阶段是第二阶段。第四阶段是第四阶段。第二阶段是第二阶段。第二阶段是第二阶段。第三阶段是第二阶段。第三阶段是第二阶段。第三阶段是第二阶段。第三阶段是第三阶段。第三阶段是第二阶段。第二阶段是第二阶段是第二阶段。第三阶段是第三阶段这是我的生日。

” }, “要点”:{ “lon”:104.411728, “lat”:-4.379512 } }
这是一个json数据,包含第一个列表中的位置细节

这是我的代码,因为我不知道如何在JsonArrayRequest中获取图像url,所以现在我只显示带有名称和评级的列表

package com.example.explorev10;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class PlaceListActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private PlaceAdapter mPlaceAdapter;
    private ArrayList<PlaceItem> mPlaceList;
    private RequestQueue mRequestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_place_list);

        mRecyclerView = findViewById(R.id.recycle_view_place_list);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        mPlaceList = new ArrayList<>();

        mRequestQueue = Volley.newRequestQueue(this);
        parseJSON();
    }

    private void parseJSON() {
        String jsonURL = "https://api.opentripmap.com/0.1/en/places/bbox?lon_min=104.268781&lat_min=-5.780249&lon_max=105.755215&lat_max=-4.101807&kinds=interesting_places&format=json&apikey=5ae2e3f221c38a28845f05b65ba166329393551235361ab9b66e2889";

        JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, jsonURL, null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
                            for (int i = 0; i < response.length(); i++) {
                                JSONObject place = response.getJSONObject(i);

                                String placeName = place.getString("name");
                                int placeRating = place.getInt("rate");
                                String imageURL = "";

                                mPlaceList.add(new PlaceItem(imageURL, placeName, placeRating));
                            }

                            mPlaceAdapter = new PlaceAdapter(PlaceListActivity.this, mPlaceList);
                            mRecyclerView.setAdapter(mPlaceAdapter);
                        } catch (JSONException e) {

                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        mRequestQueue.add(request);
    }
}
package com.example.explorev10;
导入androidx.appcompat.app.appcompat活动;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入android.os.Bundle;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonArrayRequest;
导入com.android.volley.toolbox.JsonObjectRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
公共类PlaceListActivity扩展了AppCompatActivity{
私人回收视图mRecyclerView;
私募适配器;
私有数组列表;
私有请求队列mRequestQueue;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u place\u list);
mRecyclerView=findViewById(R.id.recycle\u view\u place\u list);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mPlaceList=newarraylist();
mRequestQueue=Volley.newRequestQueue(this);
parseJSON();
}
私有void parseJSON(){
字符串jsonURL=”https://api.opentripmap.com/0.1/en/places/bbox?lon_min=104.268781&lat_min=-5.780249&lon_max=105.755215&lat_max=-4.101807&gends=interest_places&format=json&apikey=5ae2e3f221c38a28845f05b65ba166329393551235361ab9b66e2889”;
JsonArrayRequest请求=新的JsonArrayRequest(request.Method.GET,jsonURL,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
试一试{
对于(int i=0;i
如何在for循环中访问作为JsonObject的place细节? 有人能帮帮我吗??非常感谢你。。
抱歉,英文不好,还有名称和费率,请在Places pojo类中存储xid,并在第一个api的响应侦听器中调用第二个api,而不是调用recycler视图,一旦第二个api响应完成,请将列表传递给recycler视图

 private void parseSecondJSON() {
    
    String jsonURL = "secondurl";
    
    
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, jsonURL, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        for (int i = 0; i < mPlaceList.size(); i++) {
                        
                            if(mPlaceList.get(i).xid.equals(response.xid)) {
                                
                                mPlaceList.get(i).image = response.image;
                        
                            }
                        
                        }

                        mPlaceAdapter = new PlaceAdapter(PlaceListActivity.this, mPlaceList);
                        mRecyclerView.setAdapter(mPlaceAdapter);
                    } catch (JSONException e) {

                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });
    mRequestQueue.add(request);
}
private void parseSecondJSON(){
字符串jsonURL=“secondurl”;
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET,jsonURL,null,
新的Response.Listener(){
@凌驾
公共空间