>

jsonObject 요청을 사용하여 네트워크 호출을 할 때. 응답이 없습니다. URL보다 먼저 request =<[]에 대한 HTTP 응답을받습니다. 이 링크도 시도했지만 아무것도 효과가 없었습니다.

요청이 느린 경우 Android Volley 이중 게시물 :

소스 1 , source2 , 소스 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);
    }
}


  • 답변 # 1

    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();
                }
    
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //Log.i(TAG, "Response: " + error.toString());
            }
        });
        mrequestQueue.add(stringRequest);
    
    }
    
    

  • 답변 # 2

    응답 전에 앱이 완료되면 연결 시간이 초과되었습니다. 발리에서 연결 시간 초과를 추가하고 정책도 다시 시도해야합니다. 예는 다음과 같습니다

           JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
                    url,
                    request,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
    
                        }
                    }, new VolleyErrorListener(this, AuthController.LOGIN_ERROR)) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return new VolleyHeader().getHeaders();
                }
            };
            jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
                    50000,
                    0,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            NetworkRequestQueue.getInstance(mContext).getRequestQueue().add(jsonObjectRequest);
    
    

    NetworkRequestQueue 클래스는 다음과 같습니다.

    public class NetworkRequestQueue {
        private static NetworkRequestQueue mInstance;
        private static Context mCtx;
        private RequestQueue mRequestQueue;
        private ImageLoader mImageLoader;
    
        private NetworkRequestQueue(Context context) {
            mCtx = context;
            mRequestQueue = getRequestQueue();
            mImageLoader = new ImageLoader(mRequestQueue,
                    new ImageLoader.ImageCache() {
                        private final LruCache<String, Bitmap>
                                cache = new LruCache<String, Bitmap>(20);
                        @Override
                        public Bitmap getBitmap(String url) {
                            return cache.get(url);
                        }
                        @Override
                        public void putBitmap(String url, Bitmap bitmap) {
                            cache.put(url, bitmap);
                        }
                    });
        }
        public static synchronized NetworkRequestQueue getInstance(Context context) {
            if (mInstance == null) {
                mInstance = new NetworkRequestQueue(context);
            }
            return mInstance;
        }
        public RequestQueue getRequestQueue() {
            if (mRequestQueue == null) {
                Cache cache = new DiskBasedCache(mCtx.getCacheDir(), 10 * 1024 * 1024);
                Network network = new BasicNetwork(new HurlStack());
                mRequestQueue = new RequestQueue(cache, network);
                // Don't forget to start the volley request queue
                mRequestQueue.start();
            }
            return mRequestQueue;
        }
        public ImageLoader getImageLoader() {
            return mImageLoader;
        }
    
    

    }

  • 답변 # 3

    문자열 요청을 사용하여 시도

    public class TestActivity extends AppCompatActivity {
            RequestQueue requestQueue;
            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_main);
                requestQueue = Volley.newRequestQueue(this);
                callApi();
            }
            private void callApi() {
                StringRequest stringRequest = new StringRequest(Request.Method.GET, DATA_URL, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.e("res", response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("onErrorResponse: ", error.getLocalizedMessage());
                    }
                });
                requestQueue.add(stringRequest);
            }
    
    
    <시간>

  • 답변 # 4

    다음과 같이 DefaultRetryPolicy를 변경하십시오 :

    DefaultRetryPolicy policy = new DefaultRetryPolicy(0,
                        DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    jsonObject.setRetryPolicy(policy);
    
    

관련 자료

  • 이전 Brute Force 알고리즘보다 나은 방법 찾기
  • 다음 admin on rest - FunctionField가있는 BooleanField의 숫자가 Boolean으로 변경됨