本文介绍了我无法使用Volley进行网络通话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 当我使用jsonObject请求进行网络调用时。我没有收到任何回应。在我的URL之前,我总是收到request =< []的HTTP响应。 Android Volley double post当请求缓慢时: 解决方案使用 StringRequest 获取Json响应 private void callApi(){ RequestQueue mrequestQueue; StringRequest stringRequest; mrequestQueue = Volley.newRequestQueue(this); stringRequest = new StringRequest(Request.Method.GET,DATA_URL,new Response.Listener< String>(){ @Override public void onResponse(String response){ try { JSONObject jsonObject = new JSONObject(response); System.out.println(json+ jsonObject); } catch(JSONException e){ e.printStackTrace(); } },新的Response.ErrorListener (){ @Override public void onErrorResponse(VolleyError error){ //Log.i(TAG,Response:+ error.toString()); } }); mrequestQueue.add(stringRequest); } When I am making a network call using jsonObject request. I am not receiving any response. I always receive HTTP response for request=<[ ] before my URL. I have tried these links as well but nothing worked for me.Android Volley double post when have slow request:Source1, source2, Source 3 package com.example.mts3.hammadnewsapp;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.preference.PreferenceManager;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;import android.widget.Toast;import com.android.volley.DefaultRetryPolicy;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.JsonObjectRequest;import com.android.volley.toolbox.Volley;import org.json.JSONObject;import java.util.ArrayList;public class NewsDetailsActivity extends AppCompatActivity { RecyclerView recyclerView; NewsAdapter adapter; ArrayList<NewsOpen> newsList =new ArrayList<>(); Intent intent; TextView tv_newsheading; SharedPreferences sharedPreferences; SharedPreferences.Editor editor; Context context; String DATA_URL="http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/getnewsfeeds?order=asc"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news_details); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); newsList = new ArrayList<>(); recyclerView = findViewById(R.id.rv_newsdetails); recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new NewsAdapter(this, newsList); String string = (String) getText(R.string.random_text); newsList.add(new NewsOpen(R.drawable.hdr_bg_plain, "Chief Medical Officer", "10-11-2020", string));// newsList.add(new NewsOpen("image!!", "Chief Medical Officer", "10-11-2020", string)); recyclerView.setAdapter(adapter); /*backgroundTask.getList(new BackgroundTask.arrayCallBack() { @Override public void onSuccess(ArrayList<Contact> contacts) { adapter = new RecyclerAdapter(contacts); recyclerView.setAdapter(adapter); } @Override public void onFail(String msg) { // Do Stuff } });*/ } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_news_list, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_share) { //Toast.makeText(NewsDetailsActivity.this, "Share menu clicked ", Toast.LENGTH_LONG).show(); callApi(); return true; } if (id == R.id.action_logout) { sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this); editor= sharedPreferences.edit(); editor.putBoolean("Verified user",false); editor.commit(); Toast.makeText(NewsDetailsActivity.this,"Logged out ",Toast.LENGTH_LONG).show(); Intent intent=new Intent(NewsDetailsActivity.this,MainActivity.class); startActivity(intent); return true; } return super.onOptionsItemSelected(item); } private void callApi() { // new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); // int x=3;// retry count // DefaultRetryPolicy defaultRetryPolicy=new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS*1,x,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); //DefaultRetryPolicy defaultRetryPolicy= new DefaultRetryPolicy(20 * 1000, 0, 1.0f); RequestQueue requestQueue= Volley.newRequestQueue(this); //System.setProperty("http.keepAlive", "false"); JsonObjectRequest jsonObject =new JsonObjectRequest(Request.Method.GET,DATA_URL, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.e("res",response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); //int x=2;// retry count //jsonObject.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, x, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //jsonObject.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48,0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //jsonObject.setRetryPolicy(new DefaultRetryPolicy(0, -1, 0)); //jsonObject.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //jsonObject.setRetryPolicy(new DefaultRetryPolicy(0,-1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); /*jsonObject.setRetryPolicy( new DefaultRetryPolicy( 500000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT ) );*/ //jsonObject.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //new DefaultRetryPolicy(10000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); //jsonObject.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //jsonObject.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); //int socketTimeout = 30000;//30 seconds - change to what you want // RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); // jsonObject.setRetryPolicy(policy); int custom_timeout_ms = 10000; DefaultRetryPolicy policy = new DefaultRetryPolicy(custom_timeout_ms, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); jsonObject.setRetryPolicy(policy); requestQueue.add(jsonObject); }} 解决方案 Another Solution using StringRequest to get Json Response private void callApi() { RequestQueue mrequestQueue; StringRequest stringRequest; mrequestQueue = Volley.newRequestQueue(this); stringRequest = new StringRequest(Request.Method.GET, DATA_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject jsonObject = new JSONObject(response); System.out.println("json"+jsonObject); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //Log.i(TAG, "Response: " + error.toString()); } }); mrequestQueue.add(stringRequest);} 这篇关于我无法使用Volley进行网络通话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
09-15 05:08