Android 에서 XUtils 3 프레임 워 크 사용 방법 에 대한 자세 한 설명(1)
xUtils 는 실 용적 인 안 드 로 이 드 도 구 를 많이 포함 하고 있 습 니 다.
xUtils 는 큰 파일 업로드,보다 전면적 인 http 요청 프로 토 콜 지원(10 가지 서술 어)을 지원 합 니 다.더욱 유연 한 ORM,더 많은 이벤트 주석 지원,헷 갈 리 지 않 는 영향 을 받 지 않 습 니 다.
xUitls 최저 호 환 안 드 로 이 드 2.2(api level 8)
오늘 은 XUtils 3 의 기본 적 인 소 개 를 가 져 왔 습 니 다.본 글 의 사례 는 모두 XUtils 3 의 API 문법 을 바탕 으로 하 는 시연 입 니 다.이 틀 에 대해 서도 잘 알 고 있 을 거 라 고 믿 습 니 다.
다음은 XUtils 3 의 기본 지식 을 간단하게 소개 합 니 다.
XUtils 3 는 모두 4 가지 기능 이 있 습 니 다.주해 모듈,네트워크 모듈,이미지 로드 모듈,데이터 베이스 모듈 입 니 다.
XUtils 를 사용 하려 면 libs 폴 더 에 jar 패 키 지 를 추가 해 야 합 니 다.서버 에서 돌아 온 데 이 터 를 패 키 징 하려 면 Gson 의 jar 패 키 지 를 가 져 와 야 합 니 다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
주해 모듈Activity 의 주해
1.애플 리 케 이 션 의 oncreate 방법 에 다음 코드 를 추가 합 니 다.
x.Ext.init(this);
2.Activity 의 oncreate 방법 에 다음 코드 를 추가 합 니 다.
x.view().inject(this);
3.현재 Activity 레이아웃 을 불 러 오 려 면 다음 과 같은 설명 이 필요 합 니 다.
@ContentView 를 Activity 위 에 추가
4.View 를 초기 화 하려 면 다음 과 같은 설명 이 필요 합 니 다.
@InjectView
5.컨트롤 의 각종 응답 이 벤트 를 처리 하려 면 다음 과 같은 설명 이 필요 합 니 다.
@Envent
@ContentView(R.layout.activity_main)
public class MainActivity extends ActionBarActivity {
@ViewInject(R.id.btn_get)
Button btn_get;
@ViewInject(R.id.btn_post)
Button btn_post;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);
btn_get.setText(" get ");
btn_post.setText(" post ");
}
// @Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class)
@Event(value={R.id.btn_get,R.id.btn_post})
private void getEvent(View view){
switch(view.getId()){
case R.id.btn_get:
Toast.makeText(MainActivity.this, btn_get.getText().toString().trim(), 0).show();
break;
case R.id.btn_post:
Toast.makeText(MainActivity.this, btn_post.getText().toString().trim(), 0).show();
break;
}
}
테스트 를 통 해 우 리 는 btn 을 클릭 하면get 단 추 를 누 르 면'get 요청 보 내기'효과 가 나타 납 니 다.여기까지 만 해도 여러분 은 XUtils 의 주석 에 대해 기본 적 인 인식 을 가지 고 있 는 셈 입 니 다.다음은 제 가 강조 하 는 것 은@Event 라 는 주석 이 기본 적 인 상황 에서 type 속성 은 View.OnClickListener.class 입 니 다.다른 클릭 이벤트 효 과 를 실현 하려 면 type 값 만 수정 하면 됩 니 다.또 주의해 야 할 것 은 버튼 의 클릭 이 벤트 를 private 로 수정 해 야 한 다 는 점 이다.
Fragment 의 설명:
@ContentView(R.layout.fragment_first)
public class FirstFragment extends Fragment{
private MyAdapter adapter;
private List<Person> list=new ArrayList<>();
private List<String> listUrl=new ArrayList<>();
private List<String> listName=new ArrayList<>();
@ViewInject(R.id.btn_test)
Button btn_test;
@ViewInject(R.id.listView)
ListView listView;
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return x.view().inject(this, inflater, container);
}
ViewHolder 의 설명:
public class MyAdapter extends BaseAdapter{
private Context context;
private List<Person> list;
private LayoutInflater mInflater;
private ImageOptions options;
public ViewHolder holder;
public MyAdapter(Context context, List<Person> list) {
this.context = context;
this.list = list;
this.mInflater=LayoutInflater.from(context);
options=new ImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher)
.setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(true).setCircular(true).build();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
holder=null;
if(convertView==null){
convertView=mInflater.inflate(R.layout.itemone, null);
holder=new ViewHolder();
x.view().inject(holder,convertView);
convertView.setTag(holder);
}
else{
holder=(ViewHolder) convertView.getTag();
}
Person bean=list.get(position);
holder.tv_name.setText(bean.getName());
x.image().bind(holder.iv_image, bean.getImgUrl(), options);
return convertView;
}
class ViewHolder{
@ViewInject(R.id.tv_name)
private TextView tv_name;
@ViewInject(R.id.iv_image)
private ImageView iv_image;
}
위의 코드 는 View Holder 를 주석 하 는 표준 모델 로 여러분 이 충분히 볼 수 있 을 것 이 라 고 믿 습 니 다.여기 서 나 는 사진 을 불 러 와 서 XUtils 3 의 네트워크 그림 을 불 러 오 는 방법 을 사용 했다.나중에 자세히 말씀 드 리 겠 습 니 다.네트워크 모듈
XUtils 의 네트워크 요청 방법 은 일부 네트워크 요청 프레임 워 크 의 용법 과 매우 유사 해서 나 는 간단 한 패 키 징 을 진행 했다.
패 키 징 은 모두 3 개의 파일 이 있 습 니 다.각각 네트워크 요청 도구 류 XUtil,응답 데 이 터 를 요청 하 는 분석 류,그리고 하 나 는 성공 을 요청 하 는 인터페이스 리 셋 류 입 니 다.
코드 는 다음 과 같 습 니 다:
public class XUtil {
/**
* get
* @param <T>
*/
public static <T> Cancelable Get(String url,Map<String,String> map,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
if(null!=map){
for(Map.Entry<String, String> entry : map.entrySet()){
params.addQueryStringParameter(entry.getKey(), entry.getValue());
}
}
Cancelable cancelable = x.http().get(params, callback);
return cancelable;
}
/**
* post
* @param <T>
*/
public static <T> Cancelable Post(String url,Map<String,Object> map,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
if(null!=map){
for(Map.Entry<String, Object> entry : map.entrySet()){
params.addParameter(entry.getKey(), entry.getValue());
}
}
Cancelable cancelable = x.http().post(params, callback);
return cancelable;
}
/**
*
* @param <T>
*/
public static <T> Cancelable UpLoadFile(String url,Map<String,Object> map,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
if(null!=map){
for(Map.Entry<String, Object> entry : map.entrySet()){
params.addParameter(entry.getKey(), entry.getValue());
}
}
params.setMultipart(true);
Cancelable cancelable = x.http().get(params, callback);
return cancelable;
}
/**
*
* @param <T>
*/
public static <T> Cancelable DownLoadFile(String url,String filepath,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
//
params.setAutoResume(true);
params.setSaveFilePath(filepath);
Cancelable cancelable = x.http().get(params, callback);
return cancelable;
}
}
public class JsonResponseParser implements ResponseParser {
//
@Override
public void checkResponse(UriRequest request) throws Throwable {
}
/**
* result resultType
*
* @param resultType ( )
* @param resultClass
* @param result
* @return
* @throws Throwable
*/
@Override
public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable {
return new Gson().fromJson(result, resultClass);
}
}
public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{
@Override
public void onSuccess(ResultType result) {
//
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
//
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
}
1.get 요청 예제 보 내기:
// get :http://www.k780.com/api/entry.baidu
String url="http://api.k780.com:88/?app=idcard.get";
Map<String,String> map=new HashMap<>();
map.put("appkey", "10003");
map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4");
map.put("format", "json");
map.put("idcard", "110101199001011114");
XUtil.Get(url, map, new MyCallBack<PersonInfoBean>(){
@Override
public void onSuccess(PersonInfoBean result) {
super.onSuccess(result);
Log.e("result", result.toString());
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
super.onError(ex, isOnCallback);
}
});
2.post 요청 보 내기
String url="http://api.k780.com:88/?app=idcard.get";
Map<String,Object> map=new HashMap<>();
map.put("appkey", "10003");
map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4");
map.put("format", "json");
map.put("idcard", "110101199001011114");
XUtil.Post(url, map, new MyCallBack<PersonInfoBean>(){
@Override
public void onSuccess(PersonInfoBean result) {
super.onSuccess(result);
Log.e("result", result.toString());
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
super.onError(ex, isOnCallback);
}
});
3.파일 업로드
/**
* ( )
*/
private void uploadfile() {
//
String url="";
Map<String,Object> map=new HashMap<>();
//
//map.put(key, value);
//map.put(key, value);
XUtil.UpLoadFile(url, map, new MyCallBack<String>(){
@Override
public void onSuccess(String result) {
super.onSuccess(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
super.onError(ex, isOnCallback);
}
});
}
4.파일 다운로드
private void downloadfile() {
//
String url="";
//
String filepath="";
XUtil.DownLoadFile(url, filepath,new MyCallBack<File>(){
@Override
public void onSuccess(File result) {
super.onSuccess(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
super.onError(ex, isOnCallback);
}
});
5.파일 테이프 진도 표 다운로드
private void downloadprogressfile() {
//
String url="";
//
String filepath="";
XUtil.DownLoadFile(url, filepath,new MyProgressCallBack<File>(){
@Override
public void onSuccess(File result) {
super.onSuccess(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
super.onError(ex, isOnCallback);
}
@Override
public void onLoading(long total, long current,
boolean isDownloading) {
super.onLoading(total, current, isDownloading);
}
});
}
6.get 요청 보 내기(서버 xml 형식 으로 되 돌려 주기)
private void getxml() {
String url="http://flash.weather.com.cn/wmaps/xml/china.xml";
XUtil.Get(url, null, new MyCallBack<String>(){
@Override
public void onSuccess(String xmlString) {
super.onSuccess(xmlString);
try{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlString));
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
String nodeName = xmlPullParser.getName();
if ("city".equals(nodeName)) {
String pName = xmlPullParser.getAttributeValue(0);
Log.e("TAG", "city is " + pName);
}
break;
}
eventType = xmlPullParser.next();
}
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
super.onError(ex, isOnCallback);
}
});
}
이미지 로드 모듈사용법:
x.image().bind(imageView, url, imageOptions);
x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions);
x.image().bind(imageView, "assets://test.gif", imageOptions);
x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...});
Xutils 3 의 api 는 비교적 간단 합 니 다.모두 가 알 수 있 을 것 이 라 고 믿 습 니 다.첫 번 째 매개 변 수 는 하나의 View 에 들 어가 고 두 번 째 매개 변 수 는 하나의 그림 의 네트워크 주소 에 들 어 갑 니 다.세 번 째 매개 변 수 는 보통 그림 을 불 러 오 는 설정 입 니 다.다음은 ImageOptions 와 같은 종 류 를 살 펴 보 겠 습 니 다.
ImageOptions options=new ImageOptions.Builder()
//
.setLoadingDrawableId(R.drawable.ic_launcher)
//
.setFailureDrawableId(R.drawable.ic_launcher)
//
.setUseMemCache(true)
//
.setCircular(true)
// gif
.setIgnoreGif(false)
.build();
나머지 일부 설정 은 원본 코드 를 참고 하 십시오.불 러 온 그림 을 조작 할 필요 가 있다 면:
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
되 돌아 오 는 Drawable 대상 을 통 해 그림 처 리 를 하여 프로젝트 의 개성 화 된 요 구 를 만족 시 킵 니 다.이렇게 많은 말 을 했 으 니 여러분 들 은 적어도 XUtils 3 에 대해 기본 적 인 이 해 를 가지 게 될 것 이 라 고 생각 합 니 다.XUtils 3 의 데이터 베이스 용법 이 비교적 많 기 때문에 이 글 은 언급 되 지 않 을 것 입 니 다.다음 글 은 XUtils 3 의 데이터 베이스 모듈 을 상세 하 게 설명해 드 리 겠 습 니 다.여러분 빨리 지금 조작 해 보 세 요!본 고 에서 언급 한 모든 실례 는 아래 의 demo 에서 언급 될 것 이 니 스스로 참고 하 시기 바 랍 니 다.
관련 읽 기:
xutils 3.0 으로 다운로드 항목 업데이트
Android xUtils 가 3.0 으로 업 데 이 트 된 후 기본 사용 규칙 에 대한 자세 한 설명
위 에서 말 한 것 은 소 편 이 소개 한 안 드 로 이 드 에서 XUtils 3 프레임 워 크 사용 방법 에 대한 상세 한 설명(1)입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 에서 XUtils 3 프레임 워 크 사용 방법 에 대한 자세 한 설명(1)@Envent 테스트 를 통 해 우 리 는 btn 을 클릭 하면get 단 추 를 누 르 면'get 요청 보 내기'효과 가 나타 납 니 다.여기까지 만 해도 여러분 은 XUtils 의 주석 에 대해 기본 적 인 인식 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.