بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
ورژن جدیدتر ماژول وب سرویس استاد
همانطور که میدانید استاد تو قسمت ماژول وب سرویس از آموزش های سری قدیم از HttpClient استفاده کردند که دیگه منسوخ شده، همچنین برای ارسال پارامتر به سرور نیز از NameValuePair استفاده کردند که اینم منسوخ شده.
من به جای HttpClient و NameValuePair از httpURLConnectio و ContentValue استفاده کردم و به نوعی کدهای استاد رو با این دو کلاس بازسازی کردم و اینجا قرار دادم تا هرکی خواست تو پروژه خودش استفاده کنه. نحوه کار باهاش دقیقا مثل آموزش استاد هست و هیچ تفاوتی نداره فقط کدهای زیر رو تو کلاس WebService خودتون کپی کنید
public class WebserviceHelper {
private static final char[] hexArray= "0123456789ABCDEF".toCharArray();
public static final int IO_EXCEPTION = 1;
public static final int UNKNOWN_EXCEPTION = 2;
private String cacheFileName;
private String url;
private ContentValues inputArguments;
private Listener listener;
private boolean enableCache;
private String cacheDir;
private long cacheExpireTime;
private int connectionTimeout;
private int socketTimeout;
public interface Listener{
void onDataReceive(String data);
void onFail(int statusCode);
}
public WebserviceHelper url(String value){
url = value;
return this;
}
public WebserviceHelper inputArguments(ContentValues value){
inputArguments = value;
return this;
}
public WebserviceHelper listener(Listener value){
listener = value;
return this;
}
public WebserviceHelper enableCache(boolean value){
enableCache = value;
return this;
}
public WebserviceHelper cacheDir(String value){
cacheDir = value;
return this;
}
public WebserviceHelper cacheExpireTime(long value){
cacheExpireTime = value;
return this;
}
public WebserviceHelper connectionTimeout(int value){
connectionTimeout = value;
return this;
}
public WebserviceHelper socketTimeout(int value){
socketTimeout = value;
return this;
}
public void read(){
String data = null;
if(enableCache){
cacheFileName = createCacheFileName();
data = readFromCache();
}
if(data == null){
readFromNet();
} else{
if(listener != null){
listener.onDataReceive(data);
return;
}
}
}
private void readFromNet(){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection urlConnection = null;
try {
urlConnection = (HttpURLConnection) new URL(url).openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setConnectTimeout(connectionTimeout);
urlConnection.setReadTimeout(socketTimeout);
urlConnection.connect();
OutputStream outputStream = urlConnection.getOutputStream();
sendParams(outputStream, inputArguments);
InputStream inputStream = urlConnection.getInputStream();
String data = streamToString(inputStream);
if(enableCache){
saveToCache(System.currentTimeMillis(), data);
}
if (listener != null) {
listener.onDataReceive(data);
return;
}
} catch (IOException e) {
listener.onFail(IO_EXCEPTION);
if(listener !=null) {
String data = readFromCache();
if(data != null) {
listener.onDataReceive(data);
}
}
e.printStackTrace();
} catch (Exception e){
listener.onFail(UNKNOWN_EXCEPTION);
e.printStackTrace();
} finally {
urlConnection.disconnect();
}
}
});
thread.start();
}
private void saveToCache(long when, String data){
ObjectOutputStream outputStream = null;
try{
outputStream = new ObjectOutputStream(new FileOutputStream(cacheDir+ "/" + cacheFileName));
outputStream.writeLong(when);
outputStream.writeInt(data.length());
outputStream.write(data.getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(outputStream != null) {
outputStream.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private String readFromCache(){
ObjectInputStream inputStream = null;
try{
if(cacheDir != null) {
inputStream = new ObjectInputStream(new FileInputStream(cacheDir + "/" + cacheFileName));
long when = inputStream.readLong();
long now = System.currentTimeMillis();
if ((now - when) > cacheExpireTime) {
new File(cacheDir + "/cache.dat").delete();
return null;
}
int length = inputStream.readInt();
byte[] buffer = new byte[length];
inputStream.read(buffer, 0, length);
String output = new String(buffer);
return "cache"+output;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private String createCacheFileName(){
String output = url;
for(Map.Entry entry : inputArguments.valueSet()){
output += String.valueOf(entry.getKey()) + String.valueOf(entry.getValue());
}
String outputSha1 = sha1(output);
return outputSha1 + ".dat";
}
private String streamToString(InputStream inputStream){
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
try{
String line;
while((line = reader.readLine()) != null){
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "";
}
private void sendParams(OutputStream outputStream, ContentValues params){
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
StringBuilder builder = new StringBuilder();
boolean first = true;
for(Map.Entry param : params.valueSet()){
if(first){
first = !first;
} else{
builder.append("&");
}
builder.append(URLEncoder.encode(String.valueOf(param.getKey()), "UTF-8"));
builder.append("=");
builder.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
writer.write(builder.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private String sha1(String toHash){
String hash = null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte[] bytes = toHash.getBytes("UTF-8");
digest.update(bytes, 0, bytes.length);
bytes = digest.digest();
hash = byteToHex(bytes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return hash;
}
private String byteToHex(byte[] bytes){
char[] hexChars = new char[bytes.length * 2];
for(int i=0; i<bytes.length; i++){
int v = bytes[i]&0xFF;
hexChars[i * 2] = hexArray[v>>>4];
hexChars[i * 2 + 1] = hexArray[v&0x0F];
}
return new String(hexChars);
}
}
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .