restructured MainActivity: moved downloading and parsing to external AsyncTask

This commit is contained in:
Kevin Meyer 2014-12-16 10:41:20 +01:00
parent d6275d7d07
commit b98d2a9aaf
2 changed files with 482 additions and 534 deletions

View File

@ -0,0 +1,278 @@
package fr.gaulupeau.apps.Poche;
import android.content.ContentValues;
import android.database.sqlite.SQLiteConstraintException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.AsyncTask;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import fr.gaulupeau.apps.InThePoche.R;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARCHIVE;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARTICLE_CONTENT;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARTICLE_DATE;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARTICLE_SYNC;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARTICLE_TABLE;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARTICLE_TITLE;
import static fr.gaulupeau.apps.Poche.ArticlesSQLiteOpenHelper.ARTICLE_URL;
/**
* Created by kevinmeyer on 13/12/14.
*/
interface FeedUpdaterInterface {
void feedUpdaterFinishedWithError(String errorMessage);
void feedUpdatedFinishedSuccessfully();
}
public class FeedUpdater extends AsyncTask<Void, Void, Void> {
private SQLiteDatabase database;
private String wallabagUrl;
private String apiUserId;
private String apiToken;
private FeedUpdaterInterface callback;
private String errorMessage;
public FeedUpdater(String wallabagUrl, String apiUserId, String apiToken, SQLiteDatabase writableDatabase, FeedUpdaterInterface callback) {
this.wallabagUrl = wallabagUrl;
this.apiUserId = apiUserId;
this.apiToken = apiToken;
this.database = writableDatabase;
this.callback = callback;
}
@Override
protected Void doInBackground(Void... params) {
parseRSS();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (callback == null)
return;
if (errorMessage == null) {
callback.feedUpdatedFinishedSuccessfully();
} else {
callback.feedUpdaterFinishedWithError(errorMessage);
}
}
private void trustEveryone() {
try {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new X509TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(
context.getSocketFactory());
} catch (Exception e) { // should never happen
e.printStackTrace();
}
}
public void parseRSS() {
URL url;
try {
// Set the url (you will need to change this to your RSS URL
url = new URL(wallabagUrl + "/?feed&type=home&user_id=" + apiUserId + "&token=" + apiToken);
if (wallabagUrl.startsWith("https")) {
trustEveryone();
}
// Setup the connection
HttpURLConnection urlConnection;
urlConnection = (HttpURLConnection) url.openConnection();
if ((urlConnection != null) && (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK)) {
// Retreive the XML from the URL
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = null;
InputSource is;
try {
is = new InputSource(
new InputStreamReader(
urlConnection.getInputStream()));
doc = db.parse(is);
doc.getDocumentElement().normalize();
} catch (SAXException e) {
e.printStackTrace();
InputStream inputStream = url.openStream();
int ch;
StringBuffer stringBuffer = new StringBuffer();
while ((ch = inputStream.read()) != -1) {
stringBuffer.append((char) ch);
}
errorMessage = ":\nGot invalid response:\n\"" + stringBuffer.toString() + "\"";
return;
}
// This is the root node of each section you want to parse
NodeList itemLst = doc.getElementsByTagName("item");
// This sets up some arrays to hold the data parsed
arrays.PodcastTitle = new String[itemLst.getLength()];
arrays.PodcastURL = new String[itemLst.getLength()];
arrays.PodcastContent = new String[itemLst.getLength()];
arrays.PodcastMedia = new String[itemLst.getLength()];
arrays.PodcastDate = new String[itemLst.getLength()];
// Loop through the XML passing the data to the arrays
for (int i = 0; i < itemLst.getLength(); i++) {
Node item = itemLst.item(i);
if (item.getNodeType() == Node.ELEMENT_NODE) {
Element ielem = (Element) item;
// This section gets the elements from the XML
// that we want to use you will need to add
// and remove elements that you want / don't want
NodeList title = ielem.getElementsByTagName("title");
NodeList link = ielem.getElementsByTagName("link");
NodeList date = ielem.getElementsByTagName("pubDate");
NodeList content = ielem
.getElementsByTagName("description");
//NodeList media = ielem
// .getElementsByTagName("media:content");
// This is an attribute of an element so I create
// a string to make it easier to use
//String mediaurl = media.item(0).getAttributes()
// .getNamedItem("url").getNodeValue();
// This section adds an entry to the arrays with the
// data retrieved from above. I have surrounded each
// with try/catch just incase the element does not
// exist
try {
arrays.PodcastTitle[i] = cleanString(title.item(0).getChildNodes().item(0).getNodeValue());
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastTitle[i] = "Echec";
}
try {
arrays.PodcastDate[i] = date.item(0).getChildNodes().item(0).getNodeValue();
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastDate[i] = null;
}
try {
arrays.PodcastURL[i] = link.item(0).getChildNodes()
.item(0).getNodeValue();
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastURL[i] = "Echec";
}
try {
arrays.PodcastContent[i] = content.item(0)
.getChildNodes().item(0).getNodeValue();
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastContent[i] = "Echec";
}
ContentValues values = new ContentValues();
values.put(ARTICLE_TITLE, arrays.PodcastTitle[i]);
values.put(ARTICLE_CONTENT, arrays.PodcastContent[i]);
//values.put(ARTICLE_ID, Html.fromHtml(article.getString("id")).toString());
values.put(ARTICLE_URL, arrays.PodcastURL[i]);
values.put(ARTICLE_DATE, arrays.PodcastDate[i]);
values.put(ARCHIVE, 0);
values.put(ARTICLE_SYNC, 0);
try {
database.insertOrThrow(ARTICLE_TABLE, null, values);
} catch (SQLiteConstraintException e) {
continue;
} catch (SQLiteException e) {
database.execSQL("ALTER TABLE " + ARTICLE_TABLE + " ADD COLUMN " + ARTICLE_DATE + " datetime;");
database.insertOrThrow(ARTICLE_TABLE, null, values);
}
}
}
} else {
// HTTP Connection not successful
if (urlConnection == null) {
errorMessage = "";
} else {
errorMessage = ":\n" + urlConnection.getResponseCode() + " " + urlConnection.getResponseMessage();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String cleanString(String s) {
s = s.replace("&Atilde;&copy;", "&eacute;");
s = s.replace("&Atilde;&uml;", "&egrave;");
s = s.replace("&Atilde;&ordf;", "&ecirc;");
s = s.replace("&Atilde;&laquo;", "&euml;");
s = s.replace("&Atilde;&nbsp;", "&agrave;");
s = s.replace("&Atilde;&curren;", "&auml;");
s = s.replace("&Atilde;&cent;", "&acirc;");
s = s.replace("&Atilde;&sup1;", "&ugrave;");
s = s.replace("&Atilde;&raquo;", "&ucirc;");
s = s.replace("&Atilde;&frac14;", "&uuml;");
s = s.replace("&Atilde;&acute;", "&ocirc;");
s = s.replace("&Atilde;&para;", "&ouml;");
s = s.replace("&Atilde;&reg;", "&icirc;");
s = s.replace("&Atilde;&macr;", "&iuml;");
s = s.replace("&Atilde;&sect;", "&ccedil;");
s = s.replace("&amp;", "&amp;");
// Replace multiple whitespaces with single space
s = s.replaceAll("\\s+", " ");
s = s.trim();
return s;
}
}

View File

@ -73,7 +73,7 @@ import static fr.gaulupeau.apps.Poche.Helpers.PREFS_NAME;
* Main activity class * Main activity class
*/ */
@TargetApi(Build.VERSION_CODES.FROYO) @TargetApi(Build.VERSION_CODES.FROYO)
public class Poche extends Activity { public class Poche extends Activity implements FeedUpdaterInterface {
private static SQLiteDatabase database; private static SQLiteDatabase database;
Button btnGetPost; Button btnGetPost;
Button btnSync; Button btnSync;
@ -84,6 +84,7 @@ public class Poche extends Activity {
static String pocheUrl; static String pocheUrl;
String action; String action;
private FeedUpdater feedUpdater;
/** /**
* Called when the activity is first created. * Called when the activity is first created.
@ -106,7 +107,6 @@ public class Poche extends Activity {
findViewById(R.id.progressBar1).setVisibility(View.VISIBLE); findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
final String extraText = extras.getString("android.intent.extra.TEXT"); final String extraText = extras.getString("android.intent.extra.TEXT");
final String pageUrl; final String pageUrl;
@ -115,7 +115,7 @@ public class Poche extends Activity {
if (matcher.find()) { if (matcher.find()) {
pageUrl = matcher.group(); pageUrl = matcher.group();
} else { } else {
showErrorMessage("Couldn't find a URL in share string:\n"+extraText); showErrorMessage("Couldn't find a URL in share string:\n" + extraText);
return; return;
} }
@ -132,7 +132,6 @@ public class Poche extends Activity {
try { try {
data = pageUrl.getBytes("UTF-8"); data = pageUrl.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
String base64 = Base64.encodeToString(data, Base64.DEFAULT); String base64 = Base64.encodeToString(data, Base64.DEFAULT);
@ -162,38 +161,11 @@ public class Poche extends Activity {
btnSync.setOnClickListener(new OnClickListener() { btnSync.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// Vérification de la connectivité Internet updateFeed();
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (pocheUrl.equals("http://")) {
showToast(getString(R.string.txtConfigNotSet));
} else if (activeNetwork != null && activeNetwork.isConnected()) {
// Exécution de la synchro en arrière-plan
findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
new Thread(new Runnable() {
@Override
public void run() {
//pushRead();
parseRSS();
runOnUiThread(new Runnable() {
@Override
public void run() {
findViewById(R.id.progressBar1).setVisibility(View.GONE);
}
});
}
}).start();
} else {
// Afficher alerte connectivité
showToast(getString(R.string.txtNetOffline));
}
} }
}); });
btnGetPost = (Button) findViewById(R.id.btnGetPost); btnGetPost = (Button) findViewById(R.id.btnGetPost);
//updateUnread();
btnGetPost.setOnClickListener(new OnClickListener() { btnGetPost.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -211,6 +183,24 @@ public class Poche extends Activity {
} }
} }
private void updateFeed() {
// Ensure Internet connectivity
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (pocheUrl.equals("http://")) {
showToast(getString(R.string.txtConfigNotSet));
} else if (activeNetwork != null && activeNetwork.isConnected()) {
// Run update task
findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
ArticlesSQLiteOpenHelper sqLiteOpenHelper = new ArticlesSQLiteOpenHelper(this);
feedUpdater = new FeedUpdater(pocheUrl, apiUsername, apiToken, sqLiteOpenHelper.getWritableDatabase(), this);
feedUpdater.execute();
} else {
// Show message if not connected
showToast(getString(R.string.txtNetOffline));
}
}
private void checkAndHandleAfterUpdate() { private void checkAndHandleAfterUpdate() {
SharedPreferences pref = getSharedPreferences(PREFS_NAME, 0); SharedPreferences pref = getSharedPreferences(PREFS_NAME, 0);
@ -248,6 +238,14 @@ public class Poche extends Activity {
} }
} }
@Override
protected void onPause() {
super.onPause();
if (feedUpdater != null) {
feedUpdater.cancel(true);
}
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
@ -290,345 +288,17 @@ public class Poche extends Activity {
}); });
} }
// public void pocheIt(String url){ @Override
// String id ="req-001"; public void feedUpdatedFinishedSuccessfully() {
// JSONRPC2Request reqOut = null;
// try{
// reqOut = JSONRPC2Request.parse("{\"jsonrpc\":\"2.0\",\"method\":\"item.add\",\"id\":\"" + id + "\",\"params\":[{\"username\":\""+ apiUsername + "\",\"api_token\":\""+ apiToken +"\"}, \"" + url + "\", true]}");
// System.err.println(reqOut.toString());
// JSONRPC2Response response = sendRequest(reqOut);
// if (response.indicatesSuccess()) {
// showToast(getString(R.string.txtSyncDone));
// }
// } catch (JSONRPC2ParseException e2) {
// e2.printStackTrace();
// showToast(getString(R.string.txtSyncFailed));
// }
// finish();
// }
// public void pushRead(){
// JSONRPC2Request reqOut = null;
// String filter = ARCHIVE + "=1 AND " + ARTICLE_SYNC + "=0";
// String[] getStrColumns = new String[] {ARTICLE_ID};
// Cursor ac = database.query(
// ARTICLE_TABLE,
// getStrColumns,
// filter, null, null, null, null);
// ac.moveToFirst();
// if(!ac.isAfterLast()) {
// do {
// String article_id = ac.getString(0);
// String id ="req-001";
// try{
// reqOut = JSONRPC2Request.parse("{\"jsonrpc\":\"2.0\",\"method\":\"item.mark_as_read\",\"id\":\"" + id + "\",\"params\":[{\"username\":\""+ apiUsername + "\",\"api_token\":\""+ apiToken +"\"}, " + article_id + "]}");
// System.err.println(reqOut.toString());
// JSONRPC2Response response = sendRequest(reqOut);
// if (response.indicatesSuccess()) {
// ContentValues values = new ContentValues();
// values.put(ARTICLE_SYNC, 1);
// database.update(ARTICLE_TABLE, values, ARTICLE_ID + "=" + article_id, null);
// }
// } catch (JSONRPC2ParseException e2) {
// e2.printStackTrace();
// }
// } while (ac.moveToNext());
// }
// ac.close();
//
// }
public String cleanString(String s) {
s = s.replace("&Atilde;&copy;", "&eacute;");
s = s.replace("&Atilde;&uml;", "&egrave;");
s = s.replace("&Atilde;&ordf;", "&ecirc;");
s = s.replace("&Atilde;&laquo;", "&euml;");
s = s.replace("&Atilde;&nbsp;", "&agrave;");
s = s.replace("&Atilde;&curren;", "&auml;");
s = s.replace("&Atilde;&cent;", "&acirc;");
s = s.replace("&Atilde;&sup1;", "&ugrave;");
s = s.replace("&Atilde;&raquo;", "&ucirc;");
s = s.replace("&Atilde;&frac14;", "&uuml;");
s = s.replace("&Atilde;&acute;", "&ocirc;");
s = s.replace("&Atilde;&para;", "&ouml;");
s = s.replace("&Atilde;&reg;", "&icirc;");
s = s.replace("&Atilde;&macr;", "&iuml;");
s = s.replace("&Atilde;&sect;", "&ccedil;");
s = s.replace("&amp;", "&amp;");
// Replace multiple whitespaces with single space
s = s.replaceAll("\\s+", " ");
s = s.trim();
return s;
}
private void trustEveryone() {
try {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new X509TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(
context.getSocketFactory());
} catch (Exception e) { // should never happen
e.printStackTrace();
}
}
public void parseRSS() {
URL url;
try {
// Set the url (you will need to change this to your RSS URL
url = new URL(pocheUrl + "/?feed&type=home&user_id=" + apiUsername + "&token=" + apiToken);
if (pocheUrl.startsWith("https")) {
trustEveryone();
}
// Setup the connection
HttpURLConnection urlConnection;
urlConnection = (HttpURLConnection) url.openConnection();
if ((urlConnection != null) && (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK)) {
// Retreive the XML from the URL
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = null;
InputSource is;
try {
is = new InputSource(
new InputStreamReader(
urlConnection.getInputStream()));
doc = db.parse(is);
doc.getDocumentElement().normalize();
} catch (SAXException e) {
e.printStackTrace();
InputStream inputStream = url.openStream();
int ch;
StringBuffer stringBuffer = new StringBuffer();
while ((ch = inputStream.read()) != -1) {
stringBuffer.append((char) ch);
}
showErrorMessage("Got invalid response:\n\"" + stringBuffer.toString() + "\"");
}
// This is the root node of each section you want to parse
NodeList itemLst = doc.getElementsByTagName("item");
// This sets up some arrays to hold the data parsed
arrays.PodcastTitle = new String[itemLst.getLength()];
arrays.PodcastURL = new String[itemLst.getLength()];
arrays.PodcastContent = new String[itemLst.getLength()];
arrays.PodcastMedia = new String[itemLst.getLength()];
arrays.PodcastDate = new String[itemLst.getLength()];
// Loop through the XML passing the data to the arrays
for (int i = 0; i < itemLst.getLength(); i++) {
Node item = itemLst.item(i);
if (item.getNodeType() == Node.ELEMENT_NODE) {
Element ielem = (Element) item;
// This section gets the elements from the XML
// that we want to use you will need to add
// and remove elements that you want / don't want
NodeList title = ielem.getElementsByTagName("title");
NodeList link = ielem.getElementsByTagName("link");
NodeList date = ielem.getElementsByTagName("pubDate");
NodeList content = ielem
.getElementsByTagName("description");
//NodeList media = ielem
// .getElementsByTagName("media:content");
// This is an attribute of an element so I create
// a string to make it easier to use
//String mediaurl = media.item(0).getAttributes()
// .getNamedItem("url").getNodeValue();
// This section adds an entry to the arrays with the
// data retrieved from above. I have surrounded each
// with try/catch just incase the element does not
// exist
try {
arrays.PodcastTitle[i] = cleanString(title.item(0).getChildNodes().item(0).getNodeValue());
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastTitle[i] = "Echec";
}
try {
arrays.PodcastDate[i] = date.item(0).getChildNodes().item(0).getNodeValue();
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastDate[i] = null;
}
try {
arrays.PodcastURL[i] = link.item(0).getChildNodes()
.item(0).getNodeValue();
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastURL[i] = "Echec";
}
try {
arrays.PodcastContent[i] = content.item(0)
.getChildNodes().item(0).getNodeValue();
} catch (NullPointerException e) {
e.printStackTrace();
arrays.PodcastContent[i] = "Echec";
}
ContentValues values = new ContentValues();
values.put(ARTICLE_TITLE, arrays.PodcastTitle[i]);
values.put(ARTICLE_CONTENT, arrays.PodcastContent[i]);
//values.put(ARTICLE_ID, Html.fromHtml(article.getString("id")).toString());
values.put(ARTICLE_URL, arrays.PodcastURL[i]);
values.put(ARTICLE_DATE, arrays.PodcastDate[i]);
values.put(ARCHIVE, 0);
values.put(ARTICLE_SYNC, 0);
try {
database.insertOrThrow(ARTICLE_TABLE, null, values);
} catch (SQLiteConstraintException e) {
continue;
} catch (SQLiteException e) {
database.execSQL("ALTER TABLE " + ARTICLE_TABLE + " ADD COLUMN " + ARTICLE_DATE + " datetime;");
database.insertOrThrow(ARTICLE_TABLE, null, values);
}
}
}
showToast(getString(R.string.txtSyncDone)); showToast(getString(R.string.txtSyncDone));
} else {
// HTTP Connection not successful
if (urlConnection == null) {
showErrorMessage(getString(R.string.error_feed));
} else {
showErrorMessage(getString(R.string.error_feed) + ":\n" + urlConnection.getResponseCode() + " " + urlConnection.getResponseMessage());
}
}
updateUnread(); updateUnread();
} catch (Exception e) { findViewById(R.id.progressBar1).setVisibility(View.GONE);
e.printStackTrace();
} }
@Override
public void feedUpdaterFinishedWithError(String errorMessage) {
showErrorMessage(getString(R.string.error_feed) + errorMessage);
updateUnread();
findViewById(R.id.progressBar1).setVisibility(View.GONE);
} }
// public void fetchUnread(){
// String id = "req-001";
// JSONRPC2Request reqOut = null;
// try {
// // POCHE A LINK
// //reqOut = JSONRPC2Request.parse("{\"jsonrpc\":\"2.0\",\"method\":\"item.add\",\"id\":\"req-001\",\"params\":[{\"username\":\"poche\",\"api_token\":\"cPG2urVgA+ToMXY\"},\"http://cdetc.fr\",true]}");
// // GET A LINK
// //reqOut = JSONRPC2Request.parse("{\"jsonrpc\":\"2.0\",\"method\":\"item.info\",\"id\":\"" + id + "\",\"params\":[{\"username\":\""+ apiUsername + "\",\"api_token\":\""+ apiToken +"\"}, 1]}");
// // GET ALL UNREAD
// reqOut = JSONRPC2Request.parse("{\"jsonrpc\":\"2.0\",\"method\":\"item.list_unread\",\"id\":\"" + id + "\",\"params\":[{\"username\":\""+ apiUsername + "\",\"api_token\":\""+ apiToken +"\"}, null, null]}");
// System.err.println(reqOut.toString());
// } catch (JSONRPC2ParseException e2) {
// e2.printStackTrace();
// }
// System.out.println(reqOut.toString());
// URL url = null;
// try {
// final String rpcuser ="api_user";
// final String rpcpassword = globalToken;
//
// Authenticator.setDefault(new Authenticator() {
// protected PasswordAuthentication getPasswordAuthentication() {
// return new PasswordAuthentication (rpcuser, rpcpassword.toCharArray());
// }});
// url = new URL(pocheUrl + "/jsonrpc.php");
// } catch (MalformedURLException e1) {
// e1.printStackTrace();
// }
// JSONRPC2Session session = new JSONRPC2Session(url);
// JSONRPC2Response response = null;
// try{
// response = session.send(reqOut);
// } catch (JSONRPC2SessionException e) {
//
// System.err.println(e.getMessage());
// }
// if (response.indicatesSuccess()){
// JSONObject article = null;
// ContentValues values = new ContentValues();
// try {
// JSONArray ret = new JSONArray(response.getResult().toString());
// for (int i = 0; i < ret.length(); i++) {
// article = ret.getJSONObject(i);
// values.put(ARTICLE_TITLE, Html.fromHtml(article.getString("title")).toString());
// values.put(ARTICLE_CONTENT, Html.fromHtml(article.getString("content")).toString());
// values.put(ARTICLE_ID, Html.fromHtml(article.getString("id")).toString());
// values.put(ARTICLE_URL, Html.fromHtml(article.getString("url")).toString());
// values.put(ARCHIVE, 0);
// values.put(ARTICLE_SYNC, 0);
// try {
// database.insertOrThrow(ARTICLE_TABLE, null, values);
// } catch (SQLiteConstraintException e) {
// continue;
// }
// }
// } catch (JSONException e) {
// e.printStackTrace();
// showToast(getString(R.string.txtSyncFailed));
// }
//
// showToast(getString(R.string.txtSyncDone));
// updateUnread();
// }else{
// System.out.println(response.getError().getMessage( ));
// showToast(getString(R.string.txtSyncFailed));
// }
// }
//
// public JSONRPC2Response sendRequest(JSONRPC2Request reqOut){
// URL url = null;
// try {
// final String rpcuser ="api_user";
// final String rpcpassword = globalToken;
//
// Authenticator.setDefault(new Authenticator() {
// protected PasswordAuthentication getPasswordAuthentication() {
// return new PasswordAuthentication (rpcuser, rpcpassword.toCharArray());
// }});
// url = new URL(pocheUrl + "/jsonrpc.php");
// } catch (MalformedURLException e1) {
// e1.printStackTrace();
// }
// JSONRPC2Session session = new JSONRPC2Session(url);
// JSONRPC2Response response = null;
// try{
// response = session.send(reqOut);
// } catch (JSONRPC2SessionException e) {
//
// System.err.println(e.getMessage());
// }
// return response;
// }
} }