Android 에서 XUtils 3 프레임 워 크 사용 방법 에 대한 자세 한 설명(1)

14960 단어 xutils3쓰다
xUtils 소개
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)입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기