Aller au contenu

Ecrire dans le calendrier android (Json)


grosluc

Recommended Posts

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é par Quelu
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...
  • 1 month later...

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é par Quelu
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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" ...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par Quelu
Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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>

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...