홈>
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
- 답변 # 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);
관련 자료
- windows - 관리자 권한이있는 계정을 사용하는 동안 네트워크 연결 용 Canon 프린터 드라이버를 설치할 수 없음
- jquery - Kendo UI Grid를 사용하여 백엔드 페이지 매김을 사용할 수 없습니다
- java - Apache Camel을 사용하여 바코드를 읽을 수 없습니다
- java - Spring Boot를 사용하여 제공 할 수 없습니다
- Python Drive API를 사용하여 200MB 이상의 csv 파일을 업로드 할 수 없습니다
- javascript - react-router를 사용하여로드 할 수없는 경로
- Spring Boot에서 JUnit 5를 사용하여 RestTemplate을 모의 할 수 없습니다
- spring - JUnit 5에서 @Value를 사용하여 속성 값을 가져올 수 없습니다
- javascript - iframe을 사용하여 Angular JS 애플리케이션에서 Angular 10 애플리케이션으로 메시지를 게시 할 수 없음
- networking - 지원하는 네트워크 카드에서 1000Mbps의 인터넷을 얻을 수 없습니다
- javascript - Twilio를 사용하여 보낸 메시지 목록을 resjson 할 수 없습니다
- typescript - Angular에서`ComponentFactoryResolver`를 사용할 때 다른 구성 요소로 데이터를 전달할 수 없습니다
- r - igraph를 사용하는 네트워크 오류 메시지 Rstudio
- reactjs - JSX에서 삼항 연산자를 사용하여 리디렉션을 포함 할 수 없습니다
- python - xpath를 사용하여 href 태그에서 텍스트를 추출 할 수 없습니다
- python - pymysql을 사용하여 MySQL에 데이터 파일을로드 할 수 없습니다파일을 찾을 수 없습니다
- javascript - axios를 사용하여 React 앱에서 네트워크없이 작업
- 파이썬에서 문자열 형식을 사용하여 원하는 출력을 얻을 수 없습니다
- node.js - nestjs/mongoose를 사용하여 mongoDB를 연결할 수 없습니다
- Map Network Drive를 사용하여 공유 폴더에 액세스
관련 질문
- android : 기본 HTTP 인증으로 AuthFailureError (401)를 던지는 Volley
- android : 호출 가능한 클라우드 함수에서 결과를 어떻게 반환합니까?
- java : E /ExoPlayerImplInternal : 소스 오류 com.google.android.exoplayer2.upstream.HttpDataSource $ InvalidResponseCodeException : 응
- android : JSON (또는 POJO)을 Room Entity로 변환하는 방법은 무엇입니까?
- android : JSON 문자열에서 괄호와 따옴표를 제거하는 방법
- Android Studio의 라이브러리 모듈에 json 종속성 추가
- java : PHP 파일에 대한 직접 액세스를 차단하지만 Android 앱에서는 허용
StringRequest
를 사용하는 다른 솔루션 Json 응답을 얻는 방법