grosluc Posté(e) 1 mars 2012 Share Posté(e) 1 mars 2012 (modifié) Bonjour, Voilà je crée une application qui ecrit des rendez-vous pris sur internet directement dans le calendrier android. L'application se connecte à la base et récupère les données en Json. Je cherche donc un peu d'aide et d'explication . Merci Modifié 7 mars 2012 par Quelu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 5 mars 2012 Auteur Share Posté(e) 5 mars 2012 Voici le code en question : String[] projection = new String[] { "_id", "name" }; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = managedQuery(calendars, projection, null, null, null); if (managedCursor.moveToFirst()) { String calName; String calId; int nameColumn = managedCursor.getColumnIndex("name"); int idColumn = managedCursor.getColumnIndex("_id"); do { calName = managedCursor.getString(nameColumn); calId = managedCursor.getString(idColumn); } while (managedCursor.moveToNext()); } ContentValues event = new ContentValues(); event.put("calendar_id", "calId"); event.put("title", "Event Title"); event.put("description", "Event Desc"); event.put("eventLocation", "Event Location"); //long startTime = START_TIME_MS; //long endTime = END_TIME_MS; //event.put("dtstart", startTime); //event.put("dtend", endTime); event.put("hasAlarm", 1); Uri eventsUri = Uri.parse("content://calendar/events"); Uri url = getContentResolver().insert(eventsUri, event); }} if (managedCursor.moveToFirst()) c'est cette ligne qui pose problème , managedCursor est null mais je ne sais pas comment résoudre l'erreur :( Merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sylvain-a Posté(e) 5 mars 2012 Share Posté(e) 5 mars 2012 a priori,l'appli ne trouve pas le provider du calendrier, ce qui te renvoi un curseur null Et comme tu ne fais pas de test sur le curseur reçu (autre que moveToFirst) eh bien tu tentes d'accéder à une méthode d'un objet null... ce qui te lève une exception Null Pointer Après pour le provider, aucune idée Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 5 mars 2012 Auteur Share Posté(e) 5 mars 2012 ah oui , je comprend, mais comment résoudre ce problème ? :( Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sylvain-a Posté(e) 5 mars 2012 Share Posté(e) 5 mars 2012 Fais des recherches sur les providers, personnellement je n'en ai pas encore utilisé dans mes applis donc je ne suis pas à même de t'aider. Je t'ai répondu pour te mettre sur la piste ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 5 mars 2012 Auteur Share Posté(e) 5 mars 2012 (modifié) Merci de ton interêt en tout cas ! Modifié 6 mars 2012 par Quelu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 6 mars 2012 Auteur Share Posté(e) 6 mars 2012 (modifié) Bonjour, j'ai résolut mon problème , merci ! Modifié 7 mars 2012 par Quelu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bitoons Posté(e) 17 mars 2012 Share Posté(e) 17 mars 2012 Bonjour pourrais tu donner la solution que tu as trouvé pour résoudre ton problème ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 2 mai 2012 Auteur Share Posté(e) 2 mai 2012 (modifié) Désolé de la reponse tardive : String result = null; InputStream is = null; JSONObject json_data = null; ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); ArrayList<String> donnees = new ArrayList<String>(); try { // commandes httpClient HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://monscript.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { BoiteDialogueErreur(); } // conversion de la réponse en chaine de caractère try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "UTF-8")); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch (Exception e) { Log.i("Erreur conversion", "" + e.toString()); } // recuperation des donnees json try { JSONArray jArray = new JSONArray(result); //Premiere utilisation du calendrier Cursor cursor1 = getContentResolver().query(Uri.parse("content://com.android.calendar/calendars"), new String[] { "_id", "displayName" }, "selected=1", null, null); if (cursor1 != null && cursor1.moveToFirst()) { String[] calName1 = new String[cursor1.getCount()]; int[] calId1 = new int[cursor1.getCount()]; for (int i = 0; i < calName1.length; i++) { calId1[i] = cursor1.getInt(0); calName1[i] = cursor1.getString(1); cursor1.moveToNext(); } cursor1.close(); if (calId1.length > 0) { // we're safe here to do any further work } //Efface tous les rendez-vous déjà présents : getContentResolver().delete(Uri.parse("content://com.android.calendar/events"),"calendar_id=? and title=?", new String[]{String.valueOf(calId1[0]), "Nom Du titre de levenment"}); } //Traitement des données Json pour les afficher for (int j = 0; j < jArray.length(); j++) { json_data = jArray.getJSONObject(j); donnees.add("Nom : " + json_data.getString("ma donnée") ); //Nouvelle utilisation du Calendrier Cursor cursor = getContentResolver().query( Uri.parse("content://com.android.calendar/calendars"), new String[] { "_id", "displayName" }, "selected=1", null, null); if (cursor != null && cursor.moveToFirst()) { String[] calNames = new String[cursor.getCount()]; int[] calIds = new int[cursor.getCount()]; for (int i = 0; i < calNames.length; i++) { calIds[i] = cursor.getInt(0); calNames[i] = cursor.getString(1); cursor.moveToNext(); } cursor.close(); if (calIds.length > 0) { // we're safe here to do any further work } int cal_id = calIds[0]; ContentValues cv = new ContentValues(); //Definitions des evenements dans le calendrier: cv.put("calendar_id", cal_id); cv.put("title", ""); cv.put("description", json_data.getString("madescription")); cv.put("eventLocation", json_data.getString("monadresse") + " " + json_data.getString("comondepostal") + " " + json_data.getString("maville")); // conversion de la date en ms long startTime = 0; long endTime = 0; String startDate1 = json_data.getString("date_rdv") + " " + json_data.getString("heure_debut"); try { System.out.println("Nouvelle date debut1: " + startDate1); Date datedebut = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss").parse(startDate1); startTime = datedebut.getTime(); System.out .println("Nouvelle date debut2: " + startTime); } catch (Exception e) { } String endDate1 = json_data.getString("date_rdv") + " " + json_data.getString("heure_fin"); try { System.out.println("Nouvelle date fin1: " + endDate1); Date datefin = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss").parse(endDate1); endTime = datefin.getTime(); System.out.println("Nouvelle date fin2: " + endTime); } catch (Exception e) { } cv.put("dtstart", startTime); cv.put("dtend", endTime); cv.put("allDay", 0); // true = 1, false = 0 cv.put("hasAlarm", 1); // alarme //Insertion des evenements Uri newEvent = getContentResolver().insert( Uri.parse("content://com.android.calendar/events"), cv); // / Creation du rappel long id = Long.parseLong(newEvent.getLastPathSegment()); cv = new ContentValues(); cv.put("event_id", id); cv.put("method", 1); cv.put("minutes", 60); //Insertion du rappel getContentResolver().insert(Uri.parse("content://com.android.calendar/reminders"),cv); } } //Affichage du Json ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, donnees); setListAdapter(adapter); } catch (JSONException e) { Log.i("tagjsonexp", "" + e.toString()); } Voila :) Modifié 4 mai 2012 par Quelu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 3 mai 2012 Auteur Share Posté(e) 3 mai 2012 Salut , je cherche maintenant comment mettre un fond blanc et la police en noir pour l'affichage , le code en question : ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, donnees); setListAdapter(adapter); merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 mai 2012 Share Posté(e) 3 mai 2012 Il te suffit de créer un nouveau layout, qui reprend celui fourni par Android et sur lequel tu te basais jusqu'à présent (simple_list_item_1), et de modifier les attributs du TextView qui le compose. Ou peut être que ce que tu veux, c'est juste changer le thème de ton Activity, et passer en Light plutôt que Dark (attribut theme de la déclaration de ton Activity dans le AndroidManifest.xml) <activity android:theme="@android:style/Theme.Light" ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 3 mai 2012 Auteur Share Posté(e) 3 mai 2012 parfait exactement ce que je chercher ! B) <activity android:theme="@android:style/Theme.Light au passage il y a quelque chose pour grossir les lignes de séparations de la liste ? :P Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 mai 2012 Share Posté(e) 3 mai 2012 Pour modifier la taille du séparateur d'une ListView, tu as les attributs divider et dividerHeight de ListView, que tu peux positionner dans ton layout - divider permet de choisir la couleur ou le Drawable qui sera affiché en tant que séparateur - dividerHeight indique la taille du séparateur (surtout dans le cas d'une couleur, un Drawable ayant une taille, dividerHeight n'est pas forcément nécessaire dans ce cas) Cf. doc Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 3 mai 2012 Auteur Share Posté(e) 3 mai 2012 (modifié) Je n'ai crée de xml pour l'affichage du json :/ j'ai une listactivity public class maclasse extendsextends ListActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Modifié 3 mai 2012 par Quelu Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 mai 2012 Share Posté(e) 3 mai 2012 Effectivement, un ListActivity se base sur un layout par défaut, pas besoin d'en définir un. Mais il est tout à fait possible de définir un layout spécifique même pour une ListActivity; il suffit d'appeler setContentView dans le onCreate de la ListActivity, et de fournir l'id de ton layout. Celui-ci pourra juste contenir une ListView (attention à bien donner le bon identifiant à cette ListView : @android:id/list cf doc de ListActivity) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
grosluc Posté(e) 4 mai 2012 Auteur Share Posté(e) 4 mai 2012 merci bien j'ai procédé comme ça : <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#000000" android:dividerHeight="3dp" > </ListView> Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.