JSON Parser utilisant asynctask avec barre de progression. Quel est le bon moyen de le faire?JSON Parser utilisant asynctask avec barre de progression
I appliqué et adapté ce que je lis de Tuts, mais il renvoie NULL lorsque les données de retour de la downloadTask
Voici ma tâche downloadTask:
private class DownloadTask extends AsyncTask<Void, Integer, Void> {
private ProgressDialog dialog;
@Override
protected void onProgressUpdate(Integer... values) {
dialog.setProgress(values[0]);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
this.dialog = new ProgressDialog(ma);
this.dialog.setIndeterminate(false);
this.dialog.setMax(100);
this.dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
this.dialog.setCancelable(false);
this.dialog.setTitle(R.string.updating);
this.dialog.setMessage(getString(R.string.downloading));
this.dialog.show();
// progress = 0;
}
@Override
protected String doInBackground(String... arg0) {
int count;
byte data[] = null;
url = "http://arsonicdemo.digify.com.ph/webapi/campaigns?pf=1";
try {
URL url1 = new URL(url);
URLConnection conexion = url1.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
InputStream input = new BufferedInputStream(url1.openStream());
campaignObj = new JSONObject(parser(url));
populateCampaigns(campaignObj);
appClass.updateList();
data = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int) (total * 100/lenghtOfFile));
}
input.close();
} catch (Exception e) {
}
return new String(data);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
dialog.dismiss();
Toast.makeText(ma, "Update Successful", Toast.LENGTH_SHORT).show();
ma.initMarkers();
}
}
Ceci est essentiellement méthode populateCampaigns:
public void populateCampaigns(String url) throws JSONException {
campaignObj = new JSONObject(parser(url));
campaignData = campaignObj.getJSONObject("data");
}
Et enfin, voici la méthode d'analyse syntaxique:
public static String parser(String url) {
StringBuilder builder = new StringBuilder();
System.setProperty("http.keepAlive", "false");
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
final HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, timeout * 1000);
client = new DefaultHttpClient(httpParams);
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
Log.e("CAMPAIGN DOWNLOADER ERROR", "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
'Et enfin, voici la méthode d'analyse syntaxique:' Pourquoi vous CALLE que l'analyseur de méthode? Il n'y a rien d'analysé. Cette méthode télécharge du texte. Probablement le texte json. Mais l'analyse ... Non. Maintenant, quoi/où est le pointeur nul? – greenapps