Android 개발 에 서 는 Volley 라 이브 러 리 를 사용 하여 HTTP 요청 의 인 스 턴 스 튜 토리 얼 을 보 냅 니 다.

9216 단어 AndroidVolley
Android Volley 는 Google 이 개발 한 네트워크 lib 로 네트워크 데 이 터 를 더욱 간단 하고 빠르게 접근 할 수 있 습 니 다.Volley 라 이브 러 리 의 네트워크 요청 은 모두 비동기 적 이 므 로 비동기 처리 문 제 를 걱정 할 필요 가 없습니다.
Volley 의 장점:
요청 대기 열과 요청 우선 순위캐 시 와 메모리 관리 요청확장 성 이 강하 다.
요청 을 취소 할 수 있 습 니 다.
volley.jar 다운로드 및 컴 파일
git,ant,android sdk 설치 필요
clone 코드:

git clone https://android.googlesource.com/platform/frameworks/volley
컴 파일 jar:

android update project -p . ant jar
프로젝트 에 volley.jar 추가
하지만 이미 누군가가 volley 의 코드 를 github 에 올 렸 습 니 다.
https://github.com/mcxiaoke/android-volley,당신 은 더욱 간단 한 방식 으로 volley 를 사용 할 수 있 습 니 다:
Maven
format: jar

<dependency>
  <groupId>com.mcxiaoke.volley</groupId>
  <artifactId>library</artifactId>
  <version>1.0.6</version>
</dependency>
Gradle
format: jar

compile 'com.mcxiaoke.volley:library:1.0.6'
볼 리 작업 원리 도
201656151349558.jpg (1428×802)
Volley 단일 예 만 들 기
volley 를 사용 할 때 요청 대기 열 RequestQueue 를 만들어 야 합 니 다.요청 대기 열 을 사용 하 는 가장 좋 은 방법 은 하나의 예 로 만 드 는 것 입 니 다.전체 app 은 이러한 요청 대기 열 을 사용 합 니 다.

public class AppController extends Application {

public static final String TAG = AppController.class
    .getSimpleName();

private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;

private static AppController mInstance;

@Override
public void onCreate() {
  super.onCreate();
  mInstance = this;
}

public static synchronized AppController getInstance() {
  return mInstance;
}

public RequestQueue getRequestQueue() {
  if (mRequestQueue == null) {
    mRequestQueue = Volley.newRequestQueue(getApplicationContext());
  }

  return mRequestQueue;
}

public ImageLoader getImageLoader() {
  getRequestQueue();
  if (mImageLoader == null) {
    mImageLoader = new ImageLoader(this.mRequestQueue,
        new LruBitmapCache());
  }
  return this.mImageLoader;
}

public <T> void addToRequestQueue(Request<T> req, String tag) {
  // set the default tag if tag is empty
  req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
  getRequestQueue().add(req);
}

public <T> void addToRequestQueue(Request<T> req) {
  req.setTag(TAG);
  getRequestQueue().add(req);
}

public void cancelPendingRequests(Object tag) {
  if (mRequestQueue != null) {
    mRequestQueue.cancelAll(tag);
  }
}
}

요청 한 그림 을 저장 하기 위해 서 는 Cache 가 필요 합 니 다.

public class LruBitmapCache extends LruCache<String, Bitmap> implement ImageCache {
  public static int getDefaultLruCacheSize() {
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;

    return cacheSize;
  }

  public LruBitmapCache() {
    this(getDefaultLruCacheSize());
  }

  public LruBitmapCache(int sizeInKiloBytes) {
    super(sizeInKiloBytes);
  }

  @Override
  protected int sizeOf(String key, Bitmap value) {
    return value.getRowBytes() * value.getHeight() / 1024;
  }

  @Override
  public Bitmap getBitmap(String url) {
    return get(url);
  }

  @Override
  public void putBitmap(String url, Bitmap bitmap) {
    put(url, bitmap);
  }
}

AndroidManifest.xml 파일 에 android.permission.INTERNET 권한 을 추가 하 는 것 을 잊 지 마 세 요.
HTTP 요청 인 스 턴 스

  private Context mContext;
  private RequestQueue mRequestQueue;
  private StringRequest mStringRequest;

  //   Volley  Post  
  private void volley_post() {
    String url = "http://aplesson.com/wap/api/user.php?action=login";
    mContext = this;
    mRequestQueue = Volley.newRequestQueue(mContext);
    mStringRequest = new StringRequest(Method.POST, url,
        new Response.Listener<String>() {
          @Override
          public void onResponse(String response) {
            System.out.println("    :" + response);
          }
        }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("    :" + error.toString());
          }
        }) {
      //     
      @Override
      protected HashMap<String, String> getParams()
          throws AuthFailureError {
        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("un", "852041173");
        hashMap.put("pw", "852041173abc");
        return hashMap;
      }

      // Volley         getHeaders()   ,           HTTP     。(     )
      public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Accept", "application/json");
        headers.put("Content-Type", "application/json; charset=UTF-8");
        return headers;
      }

    };

    mRequestQueue.add(mStringRequest);

  }

  private JsonObjectRequest mJsonObjectRequest;

  //   Volley  Json    
  private void volley_json() {
    mContext = this;
    String url = "http://aplesson.com/data/101010100.html";
    // 1   RequestQueue  
    mRequestQueue = Volley.newRequestQueue(mContext);
    // 2   JsonObjectRequest  
    mJsonObjectRequest = new JsonObjectRequest(url, null,
        new Response.Listener<JSONObject>() {
          @Override
          public void onResponse(JSONObject response) {
            System.out.println("    :" + response.toString());
          }
        }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("    :" + error.toString());
          }
        });

    // 3  JsonObjectRequest   RequestQueue
    mRequestQueue.add(mJsonObjectRequest);

  }

  //   Volley  Get  
  private void volley_get() {
    mContext = this;
    String url = "http://www.aplesson.com/";
    // 1   RequestQueue  
    mRequestQueue = Volley.newRequestQueue(mContext);
    // 2   StringRequest  
    mStringRequest = new StringRequest(url,
        new Response.Listener<String>() {
          @Override
          public void onResponse(String response) {
            System.out.println("    :" + response);
          }
        }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("    :" + error.toString());
          }
        });
    // 3  StringRequest   RequestQueue
    mRequestQueue.add(mStringRequest);
  }

Volley 는 JSonObjectRequest,JSonArrayRequest,StringRequest 등 Request 형식 을 제공 합 니 다.JSON Object Request:JSON 대상 을 되 돌려 줍 니 다.
JsonArray Request:JsonArray 로 돌아 갑 니 다.
StringRequest:String 을 되 돌려 줍 니 다.데 이 터 를 스스로 처리 할 수 있 고 유연 합 니 다.
또한 Request사용자 정의 Request 를 계승 할 수 있 습 니 다.
요청 취소
Activity 에서 네트워크 요청 을 시 작 했 는데 이 네트워크 요청 이 결 과 를 되 돌려 주지 않 았 을 때 Activity 가 끝 났 습 니 다.이때 그 중의 Context 등 을 계속 사용 하면 CPU,배터리,네트워크 등 자원 을 무고 하 게 낭비 하 는 것 을 제외 하고 프로그램 crash 를 초래 할 수 있 습 니 다.따라서 우 리 는 이런 상황 을 처리 해 야 합 니 다.Volley 를 사용 하면 Activity 가 멈 출 때 완료 되 지 않 은 모든 네트워크 요청 을 취소 할 수 있 습 니 다.Volley 의 모든 요청 결 과 는 주 프로 세 스에 되 돌아 갑 니 다.주 프로 세 스에 서 요청 을 취소 하면 이 요청 들 은 주 프로 세 스에 되 돌아 오지 않 습 니 다.Volley 는 다양한 request 취소 방식 을 지원 합 니 다.
몇몇 request 에 대해 취소 작업 을 할 수 있 습 니 다:

 @Override
  public void onStop() {
    for (Request <?> req : mRequestQueue) {
      req.cancel();
    }
  }

이 대기 열의 모든 요청 을 취소 합 니 다:

 @Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    mRequestQueue.cancelAll(this);
  }

RequestFilter 나 Tag 에 따라 요청 을 중지 할 수 있 습 니 다.

 @Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();

    mRequestQueue.cancelAll( new RequestFilter() {});
    or
    mRequestQueue.cancelAll(new Object());
  }
Volley 는 http 의 GET,POST,PUT,DELETE 등 방법 을 지원 합 니 다.

좋은 웹페이지 즐겨찾기