Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / ui / base / DictionaryTask.java
1 package com.folioreader.ui.base;
2
3 import android.os.AsyncTask;
4 import android.util.Log;
5
6 import com.fasterxml.jackson.databind.DeserializationFeature;
7 import com.fasterxml.jackson.databind.ObjectMapper;
8 import com.folioreader.model.dictionary.Dictionary;
9 import com.folioreader.util.AppUtil;
10
11 import java.io.BufferedReader;
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.io.InputStreamReader;
15 import java.net.URL;
16 import java.net.URLConnection;
17
18 /**
19  * @author gautam chibde on 4/7/17.
20  */
21
22 public class DictionaryTask extends AsyncTask<String, Void, Dictionary> {
23
24     private static final String TAG = "DictionaryTask";
25
26     private DictionaryCallBack callBack;
27
28     public DictionaryTask(DictionaryCallBack callBack) {
29         this.callBack = callBack;
30     }
31
32     @Override
33     protected Dictionary doInBackground(String... strings) {
34         String strUrl = strings[0];
35         try {
36             URL url = new URL(strUrl);
37             URLConnection urlConnection = url.openConnection();
38             InputStream inputStream = urlConnection.getInputStream();
39             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, AppUtil.charsetNameForURLConnection(urlConnection)));
40             StringBuilder stringBuilder = new StringBuilder();
41             String line;
42             while ((line = bufferedReader.readLine()) != null) {
43                 stringBuilder.append(line);
44             }
45
46             ObjectMapper objectMapper = new ObjectMapper();
47             objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
48             return objectMapper.readValue(stringBuilder.toString(), Dictionary.class);
49         } catch (IOException e) {
50             Log.e(TAG, "DictionaryTask failed", e);
51         }
52         return null;
53     }
54
55     @Override
56     protected void onPostExecute(Dictionary dictionary) {
57         super.onPostExecute(dictionary);
58         if (dictionary != null) {
59             callBack.onDictionaryDataReceived(dictionary);
60         } else {
61             callBack.onError();
62         }
63         cancel(true);
64     }
65 }