質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

5050閲覧

Androidアプリ開発 ボタン押してデータ送信を行うアプリ作成について

s.kirishiba

総合スコア21

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

2クリップ

投稿2015/02/02 12:19

現在、NFCで読み込んだTextをGAEのデータストアに送信・保存を行うAndroidアプリを作成しています。
ボタンを押した後の処理を、テキストボックスに表示したデータをGAEのデータストアに送信したいのですが、どのように構成したらいいのかよくわかりません。どなたか、詳しくわかる方詳しく載っているサイトを知っていたらご教授お願いします!!
ちなみにアプリの作成には、「eclipse4.4Luna」を使用しています。また、下記の2サイトを参考に切ったり貼ったりしながら作りました。
参考の2サイト↓
http://noboru.hatenablog.jp/entry/20110818/13136
http://blog.5ive.info/archives/1040
以下は、MainActivity・androidmanifestのソースコードです。
ボタン取得とボタンの処理の間にNFCの読み込みを入れています。
ボタンの取得まではできているものの、そこからのボタンの処理ができません。ボタンの処理に、GAEへのデータ送信処理を入れてみたんですが、起動してボタンを押しても「問題が発生したため『アプリケーション名』を終了します。」と出てきてしまい、正しくボタン操作ができていないのが現状です。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.nfcsampleapp" android:versionCode="1" android:versionName="1.0" >

<!-- Playストア配信時にNFC対応端末にだけアプリが表示される -->
<uses-feature android:name="android.hardware.nfc" android:required="true" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- NFCを利用するためのパーミッション --> <uses-permission android:name="android.permission.NFC" /> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:debuggable="true" android:killAfterRestore="true"> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="*/*" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED"/> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_filter" /> </activity> </application>
</manifest>

MainActivity.java

package com.example.nfcsampleapp;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.*;
import java.net.URL;
import java.net.HttpURLConnection;
import java.nio.charset.StandardCharsets;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.os.Parcelable;
import android.content.Intent;
import android.widget.Button;
import android.widget.TextView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View.OnClickListener;
import android.widget.Toast;
import android.view.*;

import com.example.nfcsampleapp.R.id;

public class MainActivity extends Activity {

private static final String URI = "http://morilabsuzukipample04.appspot.com/"; private NfcAdapter mNfcAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //buttonを取得 Button btn1 = (Button)findViewById(R.id.touroku); Button btn2 = (Button)findViewById(R.id.search); mNfcAdapter = NfcAdapter.getDefaultAdapter(this); TextView text = (TextView)findViewById(R.id.point); // インテントの取得 Intent intent = getIntent(); //NFCシールからのアクセスかチェック String action = intent.getAction(); if (action.equals((NfcAdapter.ACTION_NDEF_DISCOVERED))) { //Ndefメッセージの取得 Parcelable[] raws = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage[] msgs = new NdefMessage[raws.length]; String str = ""; for (int i=0; i<raws.length; i++) { msgs[i] = (NdefMessage)raws[i]; for (NdefRecord record : msgs[i].getRecords()) { //payloadを取得 byte[] payload = record.getPayload(); //payloadが空白ならブレイク if (payload == null) break; int idx = 0; for(byte data : payload) { if(idx > 2){ str += String.format("%c", data); } idx++; } } } text.setText(str); } btn1.setOnClickListener(new OnClickListener() { @SuppressWarnings("unused") @Override public void onClick(View v1) { // ボタンがクリックされた時に呼び出されます Button btn1 = (Button) v1; String nam = "R.id.nam"; String name = "R.id.name"; String lec = "R.id.lec"; String point = "R.id.point"; HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost (URI); List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(1); nameValuePair.add(new BasicNameValuePair("str", nam)); nameValuePair.add(new BasicNameValuePair("str", name)); nameValuePair.add(new BasicNameValuePair("str", lec)); nameValuePair.add(new BasicNameValuePair("str", point)); try { //-----[POST送信] httppost.setEntity(new UrlEncodedFormEntity(nameValuePair,"UTF-8")); HttpResponse response = httpclient.execute(httppost); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); btn2.setOnClickListener(new OnClickListener() { // このメソッドがクリック毎に呼び出される public void onClick(View v) { // ここにクリックされたときの処理を記述 Button btn2 = (Button) v; } });

}

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

コードとログを見てみました。

ログを見るとネットワーク通信時のエラーが出力されています。
02-03 10:03:12.629: E/AndroidRuntime(16182): android.os.NetworkOnMainThreadException
ですね

Androidは、3.0以上から非同期でネットワーク通信を行わないとエラーで出る仕様になりました。

http://blog.5ive.info/archives/1040
を参考にした場合、OS 2.3などでは正常に動作しますが、3.0以上だとエラーになってしまいます。

Android NetworkOnMainThreadExceptionやAndroid AsyncTaskやAndroid 非同期通信などでググると非同期でネットワーク通信を行う記事が沢山でると思います。
AsyncTaskという非同期が行えるクラスがあるので、それを使うのが一般的ですね。

またAsyncTaskなどでネットワーク通信周りを自作で書くと大変勉強になるのですが、細かいキャッシュの処理が面倒だったりキャンセル処理が大変だったりで、ライブラリを探すのも良いと思います。

参考になれば〜

投稿2015/02/06 03:34

ueno

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問