0

プロジェクトの要件:Azureモバイルサービスを使用したWindowsAzureWebサイトとAndroidデバイス間の通信

1)Webサイトは、Microsoft Windows Azure(サーバー側)を使用してVB.NETで構築されます

2)AndroidアプリケーションはAndroidデバイス上にあります(クライアント側)

クライアント(Androidユーザー)は、Androidデバイス(クライアント側)からWebサイト(サーバー側)に、またはその逆にデータを送信できる必要があります。これを可能にするには、つまり、クライアントとサーバー間の通信Microsoft Windows Azureが提供するモバイルサービスを使用しています(サーバー側)GCM(Google Cloud Messaging)を使用する

ドキュメントに従ってすべての手順を実行しました

http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-push-android/

また、MicrosoftWindowsAzureの上記のリンクドキュメントに記載されているすべての手順に従いました

しかし、AndroidデバイスからWebサイトにメッセージを送信しようとすると、次のエラーが発生します

エラー: com.microsoft.windowsazure.mobileservices.MobileServiceException:要求の処理中にエラーが発生しました

注:GCM(Google Cloud Messaging)は、Androidアプリでサーバー(Webサイト)にデータを送信するために使用されるgcm.jarファイルを提供します。

ONCREATE CODE

           @Override
       public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_to_do);


    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    mRegistationId = GCMRegistrar.getRegistrationId(this);
    if (mRegistationId.equals("")) {
        GCMRegistrar.register(this, SENDER_ID);
    }

    mProgressBar = (ProgressBar) findViewById(R.id.loadingProgressBar);

    // Initialize the progress bar
    mProgressBar.setVisibility(ProgressBar.GONE);

    try {
        // Create the Mobile Service Client instance, using the provided
        // Mobile Service URL and key
        mClient = new MobileServiceClient(
                "url of website",
                "POBHgxwAktyxUdeRRpcFyqEcsppwiS99",
                this).withFilter(new ProgressFilter());

        // Get the Mobile Service Table instance to use
        mToDoTable = mClient.getTable(ToDoItem.class);

        mTextNewToDo = (EditText) findViewById(R.id.textNewToDo);

        // Create an adapter to bind the items with the view
        mAdapter = new ToDoItemAdapter(this, R.layout.row_list_to_do);
        ListView listViewToDo = (ListView) findViewById(R.id.listViewToDo);
        listViewToDo.setAdapter(mAdapter);

        // Load the items from the Mobile Service
        refreshItemsFromTable();
                    }
                    catch (MalformedURLException e) {
                    createAndShowDialog(new Exception("There was an error creating the Mobile Service. Verify the URL"), "Error");
                }
                }

BUTTONクリックイベントでaddItem()が呼び出されます

            public void addItem(View view) {
    if (mClient == null) {
        return;
    }

    try
    {

    // Create a new item
    ToDoItem item = new ToDoItem();

    item.setText(mTextNewToDo.getText().toString());
    item.setComplete(false);

    // Insert the new item
    mToDoTable.insert(item, new TableOperationCallback<ToDoItem>() {

        public void onCompleted(ToDoItem entity, Exception exception, ServiceFilterResponse response) {

            if (exception == null) {
                if (!entity.isComplete()) {
                    mAdapter.add(entity);
                }
            } else {
                createAndShowDialog(exception, "Error");
            }

        }
    });

    item.setRegistrationId(mRegistationId.equals("") ?
            GCMIntentService.getRegistrationId() : mRegistationId);
    mTextNewToDo.setText("");
    }
    catch(Exception ex)
    {

    }
}

            public void checkItem(ToDoItem item) {
    if (mClient == null) {
        return;
    }

    // Set the item as completed and update it in the table
    item.setComplete(true);

    mToDoTable.update(item, new TableOperationCallback<ToDoItem>() {

        public void onCompleted(ToDoItem entity, Exception exception, ServiceFilterResponse response) {
            if (exception == null) {
                if (entity.isComplete()) {
                    mAdapter.remove(entity);
                }
            } else {
                createAndShowDialog(exception, "Error");
            }
        }

    });
}

            private void refreshItemsFromTable() {

    // Get the items that weren't marked as completed and add them in the
    // adapter
    mToDoTable.where().field("complete").eq(val(false)).execute(new TableQueryCallback<ToDoItem>() {

        public void onCompleted(List<ToDoItem> result, int count, Exception exception, ServiceFilterResponse response) {
            if (exception == null) {
                mAdapter.clear();

                for (ToDoItem item : result) {
                    mAdapter.add(item);
                }

            } else {
                createAndShowDialog(exception, "Error");
            }
        }
    });
}


private void createAndShowDialog(Exception exception, String title) {
    createAndShowDialog(exception.toString(), title);
}



private void createAndShowDialog(String message, String title) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setMessage(message);
    builder.setTitle(title);
    builder.create().show();
}



             private class ProgressFilter implements ServiceFilter {

    @Override
    public void handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilterCallback,
            final ServiceFilterResponseCallback responseCallback) {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if (mProgressBar != null) mProgressBar.setVisibility(ProgressBar.VISIBLE);
            }
        });

        nextServiceFilterCallback.onNext(request, new ServiceFilterResponseCallback() {

            @Override
            public void onResponse(ServiceFilterResponse response, Exception exception) {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        if (mProgressBar != null) mProgressBar.setVisibility(ProgressBar.GONE);
                    }
                });

                if (responseCallback != null)  responseCallback.onResponse(response, exception);
            }
        });
    }
}
4

1 に答える 1