Volley on gradle
Volley
Google IO 2013で発表された非同期通信用のライブラリ。 今まで、AsyncTask+(HttpURLConnection | ApacheHttpClient)で行っていた部分を置き換えるられる.
発表の動画 http://www.youtube.com/watch?v=yhv8l9F44qo
使い方
- git clone https://android.googlesource.com/platform/frameworks/volley
- import
- Volley.newRequestQueue(context)
antでのjar化
$ ant jar
bin/volley.jarができる
gradleでのaar化
まだmaven centralにあがってなかったので、とりあえずローカルレポジトリに吐いて使えるようにする。 build.gradleを微修正
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.0'
}
}
apply plugin: 'android-library'
apply plugin: 'maven'
def code = 1
def version = '1.0'
def group = 'com.android'
def name = 'volley'
def home = System.getProperty("user.home")
def repos = "file://$home/project/android-Repository/"
uploadArchives {
repositories {
mavenDeployer {
repository url: repos
pom.version = version
pom.groupId = group
pom.artifactId = name
}
}
}
android {
compileSdkVersion 17
buildToolsVersion = 17
sourceSets {
defaultConfig {
testPackageName 'com.android.volley.tests'
}
main {
assets.srcDirs = ['assets']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
java.srcDirs = ['src']
manifest.srcFile 'AndroidManifest.xml'
}
instrumentTest {
assets.srcDirs = ["tests/assets"]
res.srcDirs = ["tests/res"]
resources.srcDirs = ["tests/src"]
java.srcDirs = ["tests/src"]
}
}
}
ローカルレポジトリにaarをはく。
$ gradle clean uploadArchives
ホントはjarで吐きたいけど、android-library pluginを使ったときに、jarで吐く方法がわからなかった。
プロジェクトで利用する
build.gradleを以下のように編集.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
def home = System.getProperty("user.home")
def repos = "file://$home/project/android-Repository/"
repositories {
mavenCentral()
maven {
url repos
}
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
compile 'com.android:volley:1.0'
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 17
}
}
試してみる。
package me.mattak.volley_sample;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import com.android.volley.NetworkResponse;
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.JsonRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends Activity {
private RequestQueue mQueue;
private String TAG_VOLLEY = "[main]";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
request();
}
protected void onStop() {
super.onStop();
mQueue.cancelAll(TAG_VOLLEY);
}
private void init() {
mQueue = Volley.newRequestQueue(getApplicationContext());
}
private void request() {
final TextView tv = (TextView) findViewById(R.id.main_text);
Request request = new StringRequest(Request.Method.GET, "http://ifconfig.me/ip", new Response.Listener<String>(){
public void onResponse(String message) {
tv.setText(message);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv.setText(volleyError.getLocalizedMessage());
}
});
request.setTag(TAG_VOLLEY);
mQueue.add(request);
}
}