2

Android アプリで動作するカレンダーを取得しました。私の目標は、他の Google アカウントに関連付けられているカレンダーからこのカレンダーにイベントを追加することです。アプリでイベントを表示するには、Google カレンダーを公開する必要があることを発見しました。これにより、アプリだけでなく、誰もがカレンダーを表示できるようになります。JSON データが表示されるので、Google カレンダーが正しく設定されていることがわかります。JSON データを解析する URL は次のとおりhttp://www.google.com/calendar/feeds/[my other calendar]@gmail.com/public/fullです。私の質問は、このJSONデータをアプリに解析するにはどうすればよいですか? JSON 解析クラスを作成し、Calendar アクティビティでその JSON 解析クラスを参照する必要があると思います。私の Calendar クラスは次のようになります。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Locale;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.Button;
import android.content.Intent;

public class Calendar32View extends Activity {

public GregorianCalendar month, itemmonth;// calendar instances.

public Calendar31Adapter adapter;// adapter instance
public Handler handler;// for grabbing some event values for showing the dot
                        // marker.
public ArrayList<String> items; // container to store calendar items which
                                // needs showing the    event marker
ArrayList<String> event;
LinearLayout rLayout;
ArrayList<String> date;
ArrayList<String> desc;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cal3_2);
    Locale.setDefault(Locale.US);

    rLayout = (LinearLayout) findViewById(R.id.text);
    month = (GregorianCalendar) GregorianCalendar.getInstance();
    itemmonth = (GregorianCalendar) month.clone();

    items = new ArrayList<String>();

    adapter = new Calendar31Adapter(this, month);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(adapter);
    handler = new Handler();

    // ---
    //handler.post(calendarUpdater);//--- adds Events
    // ----

    TextView title = (TextView) findViewById(R.id.title);
    title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));

    // --- Previous Month Button
    RelativeLayout previous = (RelativeLayout) findViewById(R.id.previous);
    previous.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setPreviousMonth();
            refreshCalendar();
        }
    });
    // --- END Previous Month Button

    // --- Next Month Button
    RelativeLayout next = (RelativeLayout) findViewById(R.id.next);
    next.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            setNextMonth();
            refreshCalendar();

        }
    });
    // --- END Next Month Button

    // --- onClick of date ----

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {

            // removing the previous view if added
            if (((LinearLayout) rLayout).getChildCount() > 0) {
                ((LinearLayout) rLayout).removeAllViews();
            }
        }

    });

    // --- END onClick of date ----

}// --- END onCreate

// ---- METHODS ---

protected void setPreviousMonth() {
    if (month.get(GregorianCalendar.MONTH) == month
            .getActualMinimum(GregorianCalendar.MONTH)) {
        month.set((month.get(GregorianCalendar.YEAR) - 1),
                month.getActualMaximum(GregorianCalendar.MONTH), 1);
    } else {
        month.set(GregorianCalendar.MONTH,
                month.get(GregorianCalendar.MONTH) - 1);
    }

}// --- end method

protected void setNextMonth() {
    if (month.get(GregorianCalendar.MONTH) == month
            .getActualMaximum(GregorianCalendar.MONTH)) {
        month.set((month.get(GregorianCalendar.YEAR) + 1),
                month.getActualMinimum(GregorianCalendar.MONTH), 1);
    } else {
        month.set(GregorianCalendar.MONTH,
                month.get(GregorianCalendar.MONTH) + 1);
    }

}// --- END Method

protected void showToast(String string) {
    Toast.makeText(this, string, Toast.LENGTH_SHORT).show();

}// --- end method

public void refreshCalendar() {
    TextView title = (TextView) findViewById(R.id.title);

    adapter.refreshDays();
    adapter.notifyDataSetChanged();

    title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
}// --- end method



// --- END METHODS -----

}`

これを行う方法に関するチュートリアルが見つからないようです。2.3.4 の電話で実行できるように、SDK 8 をターゲットにしています。

4

1 に答える 1

0

Java にはクラス JSONObject が含まれています: cf:" http://www.json.org/javadoc/org/json/JSONObject.html " これらのメソッドのいずれかを使用できます。特別な getString(String key)、hashMap の使用など

于 2013-11-19T06:15:59.153 に答える