jsonArray请求没有响应[关闭]

Posted

技术标签:

【中文标题】jsonArray请求没有响应[关闭]【英文标题】:No response from jsonArray request [closed] 【发布时间】:2017-12-07 13:31:35 【问题描述】:

我正在尝试从 android 获取数据到自定义 ListView,但我无法获取!请帮忙

我的 JSON:_

  
   "College":[  
        
         "Name":"NITK",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\nitk.jpg"
      ,
        
         "Name":"IITR",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\iitr.jpg"
      ,
        
         "Name":"NITT",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\nitt.jpg"
      ,
        
         "Name":"IITB",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\iitb.png"
      ,
        
         "Name":"IITG",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\iitg.png"
      ,
        
         "Name":"IITD",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\iitd.png"
      ,
        
         "Name":"BITS",
         "Logo":"http:\/\/192.168.43.164\\Webapp\\Collegelogos\\bits.png"
      
   ]

代码:-

public class MainActivity extends AppCompatActivity 
    private List<College> listcollege;

    //Creating Views
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter adapter;

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

        //Initializing Views
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        listcollege = new ArrayList<>();
        getData();

    

    private void getData()
        //Showing a progress dialog
        final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false);

        //Creating a json array request
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL,
                new Response.Listener<JSONArray>() 
                    @Override
                    public void onResponse(JSONArray response) 
                        //Dismissing progress dialog
                        Toast.makeText(MainActivity.this, "sachin", Toast.LENGTH_SHORT).show();
                        loading.dismiss();

                        //calling method to parse json array
                        parseData(response);
                    
                ,
                new Response.ErrorListener() 
                    @Override
                    public void onErrorResponse(VolleyError error) 

                    
                );

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(jsonArrayRequest);
    
    public  void parseData(JSONArray array) 
        for (int i = 0; i < array.length(); i++) 
            College college = new College();
            JSONObject json = null;
            try 
                json = array.getJSONObject(i);
                college.setImageUrl(json.getString(Config.TAG_IMAGE_URL));
               String s = (json.getString(Config.TAG_NAME));
                Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
                college.setName(s);

             catch (JSONException e) 
                e.printStackTrace();
            
            listcollege.add(college);

        
            adapter = new CardAdapter(this, listcollege);
            recyclerView.setAdapter(adapter);
      //  adapter.notifyDataSetChanged();

    



日志:- 安卓监视器

07-04 13:02:42.289 16225-16256/com.example.sachin.volleyrecycle I/OpenGLRenderer: Initialized EGL, version 1.4
07-04 13:02:42.289 16225-16256/com.example.sachin.volleyrecycle D/OpenGLRenderer: Swap behavior 1
07-04 13:02:42.289 16225-16256/com.example.sachin.volleyrecycle W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
07-04 13:02:42.289 16225-16256/com.example.sachin.volleyrecycle D/OpenGLRenderer: Swap behavior 0
07-04 13:02:42.702 16225-16225/com.example.sachin.volleyrecycle E/RecyclerView: No adapter attached; skipping layout
07-04 13:02:42.946 16225-16225/com.example.sachin.volleyrecycle W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView

【问题讨论】:

我认为您没有创建合适的适配器来显示您的列表。请检查您的适配器类。 这不是问题!数据获取问题 Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? 我可以给你一个想法:如果你想快速解决问题 - 你必须为此付出代价。聘请开发人员来解决您的问题。如果您不想 - 改进您的问题,以便更容易理解问题所在,并耐心等待。 【参考方案1】:

1. 初始化您的adapter 并将其从onCreate() 方法设置为RecyclerView

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

    //Initializing Views
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    listcollege = new ArrayList<>();
    adapter = new CardAdapter(this, listcollege);
    recyclerView.setAdapter(adapter);

    getData();

2. 尝试使用JsonObjectRequest,而不是JsonArrayRequest

//Creating a json object request
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (Config.DATA_URL,
        new Response.Listener<JSONObject>() 
            @Override
            public void onResponse(JSONObject response) 
                //Dismissing progress dialog
                Toast.makeText(MainActivity.this, "sachin", Toast.LENGTH_SHORT).show();
                loading.dismiss();

                // College 
                JSONArray jsonArrayCollege = response.getJSONArray("College");

                // calling method to parse json array
                parseData(jsonArrayCollege);
            
        ,
        new Response.ErrorListener() 
            @Override
            public void onErrorResponse(VolleyError error) 

            
        );

//Creating request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);

//Adding request to the queue
requestQueue.add(jsonObjectRequest);

3.更新parseData()方法如下:

public  void parseData(JSONArray array) 
    for (int i = 0; i < array.length(); i++) 
        College college = new College();
        JSONObject json = null;
        try 
            json = array.getJSONObject(i);
            college.setImageUrl(json.getString(Config.TAG_IMAGE_URL));
           String s = (json.getString(Config.TAG_NAME));
            Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
            college.setName(s);

         catch (JSONException e) 
            e.printStackTrace();
        
        listcollege.add(college);
      
    adapter.notifyDataSetChanged();

希望对你有帮助~

【讨论】:

以上是关于jsonArray请求没有响应[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Dio 没有响应关闭的 API

WCF - (504) 服务器没有为此请求返回响应

查看响应标头的工具[关闭]

web的请求和响应

OkHttpClient 关闭连接

从改造响应中获取 JSONArray