Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / ui / base / WikipediaTask.java
1 package com.folioreader.ui.base;
2
3 import android.os.AsyncTask;
4 import android.util.Log;
5
6 import com.folioreader.model.dictionary.Wikipedia;
7 import com.folioreader.util.AppUtil;
8
9 import org.json.JSONArray;
10 import org.json.JSONException;
11
12 import java.io.BufferedReader;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.io.InputStreamReader;
16 import java.net.URL;
17 import java.net.URLConnection;
18
19 /**
20  * @author gautam chibde on 4/7/17.
21  */
22
23 public class WikipediaTask extends AsyncTask<String, Void, Wikipedia> {
24
25     private static final String TAG = "WikipediaTask";
26
27     private WikipediaCallBack callBack;
28
29     public WikipediaTask(WikipediaCallBack callBack) {
30         this.callBack = callBack;
31     }
32
33     @Override
34     protected Wikipedia doInBackground(String... strings) {
35         String strUrl = strings[0];
36         try {
37             URL url = new URL(strUrl);
38             URLConnection urlConnection = url.openConnection();
39             InputStream inputStream = urlConnection.getInputStream();
40             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, AppUtil.charsetNameForURLConnection(urlConnection)));
41             StringBuilder stringBuilder = new StringBuilder();
42             String line;
43             while ((line = bufferedReader.readLine()) != null) {
44                 stringBuilder.append(line);
45             }
46
47             try {
48                 JSONArray array = new JSONArray(stringBuilder.toString());
49
50                 if (array.length() == 4) {
51                     try {
52                         Wikipedia wikipedia = new Wikipedia();
53                         wikipedia.setWord(array.get(0).toString());
54                         JSONArray defs = (JSONArray) array.get(2);
55                         wikipedia.setDefinition(defs.get(0).toString());
56                         JSONArray links = (JSONArray) array.get(3);
57                         wikipedia.setLink(links.get(0).toString());
58                         return wikipedia;
59                     } catch (Exception e) {
60                         Log.e(TAG, "WikipediaTask failed", e);
61                         return null;
62                     }
63
64                 } else {
65                     return null;
66                 }
67             } catch (JSONException e) {
68                 Log.e(TAG, "WikipediaTask failed", e);
69                 return null;
70             }
71         } catch (IOException e) {
72             Log.e(TAG, "WikipediaTask failed", e);
73         }
74         return null;
75     }
76
77     @Override
78     protected void onPostExecute(Wikipedia wikipedia) {
79         super.onPostExecute(wikipedia);
80         if (wikipedia != null) {
81             callBack.onWikipediaDataReceived(wikipedia);
82         } else {
83             callBack.onError();
84         }
85         cancel(true);
86     }
87 }