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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

3450閲覧

OnItemClickListenerの実装は、MainActivityでは、行えないでしょうか?

edoooooo

総合スコア476

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/05/10 03:41

編集2017/05/10 04:02

このようにエラーがでます。
I/System.out: 予期しない例外が発生しました。:java.lang.IllegalStateException: System services not available to Activities before onCreate()

java.lang.IllegalStateException:onCreate()の前にアクティビティーが利用できないシステム・サービす
というエラーが onItemClickした時に、出るのですが、これは、
LocationActivityのなかで、OnItemClickListenerを実装するコードを書いているからなのでしょうか?

下のOnItemClick()のように、MainActivityとは、別のクラスで、これらを行わないといけないのでしょうか?

字数制限のため、全体の流れを書き込みたく、省略されている行が多いです。

java

1public class LocationActivity extends AppCompatActivity implements 2 GoogleApiClient.ConnectionCallbacks, 3 GoogleApiClient.OnConnectionFailedListener, 4 LocationListener,OnMapReadyCallback,GoogleMap.OnMapLongClickListener, 5 ListView.OnItemClickListener,ListView.OnItemLongClickListener { 6 7 8 9 10 final ArrayList<String> listItems = new ArrayList<>(); 11 12 static String username = null; 13 14 //---------------------------------------------------------onCreate()------------------------------------------------------------------// 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 19 favorite(); 20 } 21 22 //------------------------------------------------------------ログイン--------------------------------------------------------// 23 @Override 24 public boolean onOptionsItemSelected(MenuItem item) { 25 int id = item.getItemId(); 26 27 if (id == R.id.action_setlogin) { 28 29 // カスタムビューを設定 30 LayoutInflater inflater = (LayoutInflater) this.getSystemService( 31 LAYOUT_INFLATER_SERVICE); 32 final View layout = inflater.inflate(R.layout.dialog_contact_us, (ViewGroup) findViewById(R.id.layout_root)); 33 34 35 // アラーとダイアログ を生成 36 AlertDialog.Builder builder = new AlertDialog.Builder(this); 37 builder.setView(layout); 38 39 40 builder.setNegativeButton("ログイン", new DialogInterface.OnClickListener() { 41 public void onClick(DialogInterface dialog, int which) { 42 43 String sql = "select username from user where username = '" + getusername + "' and password = '" + password + "';"; 44 45 Cursor c = db.rawQuery(sql, null); 46 47 48 c.moveToFirst(); 49 username = checkusername; 50 51 favorite(); 52 53 } 54 }); 55 } 56 57 builder.create().show(); 58 59 60//----------------------------------------------------------onStart()-------------------------------------------------------------------// 61 @Override 62 protected void onStart() { 63 super.onStart(); 64 65 66 listView = (ListView) findViewById(R.id.list_view); 67 68//--------------------------------------------お気に入りの選択---------------------------------------------------------------------------// 69 if (item.equals("おきにいり")) { 70 71 String sql = "select latitude,longitude from favorite where placename = '" + item + "' " + 72 "and username = '" + username + "';"; 73 74 Cursor c = db.rawQuery(sql, null); 75 76 c.moveToFirst(); 77 78 } 79 } 80 //リスナーの終わり、 81 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems); 82 83 //ここにcreateFromResourceがないことだけ 84 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 85 spinner.setAdapter(adapter); 86 87 // 初回起動時の対応 88 spinner.setFocusable(false); 89 90 91//-----------------------------------------------ここからはコメント送信ボタン、spinner----------------------------------------------------// 92 Button buttonTransmission = (Button) findViewById(R.id.buttonTransmission); 93 buttonTransmission.setOnClickListener(new View.OnClickListener() { 94@Override 95public void onClick(View v){ 96 97 sql = "insert into neardb(data,username,comment,latitude,longitude)" + 98 " values ('" + data + "','" + username + "','" + comment + "'," + latitude + "," + longitude + ");"; 99 db.execSQL(sql); 100 101 } 102//----------------------------------------------------------onClick--------------------------------------------------------------------// 103 104@Override 105public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 106 107try{ 108 String getdesdata = item.substring(0, item.indexOf(":")); 109 110 data = dataand.substring(0, dataand.indexOf(" ")); 111 comment = usernameand.substring(usernameand.indexOf(" ") + 1); 112 113 LayoutInflater inflater = (LayoutInflater) LocationActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE); 114 final View layout = inflater.inflate(R.layout.dialog_edit_comment, (ViewGroup) findViewById(R.id.layout_edit)); 115 // アラーとダイアログ を生成 116 AlertDialog.Builder builder = new AlertDialog.Builder(LocationActivity.this); 117 builder.setView(layout); 118 //---------dailogの削除ボタンを追加、それが押されたらデータベースから削除する--------// 119 builder.setPositiveButton("更新", new DialogInterface.OnClickListener() { 120 public void onClick(DialogInterface dialog, int which) { 121 } 122 }); 123 124 builder.create().show(); 125 } 126 } catch (NullPointerException e) { 127 System.out.println("NullPointerExceptionが発生しました。"); 128 } catch (Throwable e) { 129 System.out.println("予期しない例外が発生しました。:"+e); 130 //I/System.out: 予期しない例外が発生しました。 131//:java.lang.IllegalStateException: System services not available to Activities before onCreate() このようにエラーがでました。 132 } 133 134//--------------------------------------------------------favorite---------------------------------------------------------------------// 135//これをログインした時に usernameを使って、と、newPlaceをinsertしたあとに呼び出す、 136public void favorite() { 137 MyOpenHelper helper = new MyOpenHelper(LocationActivity.this); 138 SQLiteDatabase db = helper.getReadableDatabase(); 139 140 if (username != null) { 141 String sql = "select placename from favorite where username = '" + username + "';"; 142 143 144 Cursor c = db.rawQuery(sql, null); 145 146 boolean mov = c.moveToFirst(); 147 int mam = 0; 148 while (mov) { 149 String in = c.getString(0); 150 spinnerItems[mam + 2] = in; 151 mov = c.moveToNext(); 152 mam = mam + 1; 153 154 } 155 156 onStart(); 157 c.close(); 158 db.close(); 159 } 160 161//----------------------------------------------------------startFusedLocation()----------------------------------------------------// 162//startFusedLocation() 163 164 private void startFusedLocation() { 165 166 if (!mResolvingError) { 167 168 mGoogleApiClient = new GoogleApiClient.Builder(this) 169 .addApi(LocationServices.API) 170 .addConnectionCallbacks(this) 171 .addOnConnectionFailedListener(this) //failedListenerがある 172 .build(); 173 174 if (!(mGoogleApiClient.isConnected())){ 175 mGoogleApiClient.connect(); 176 } 177 } 178 179 } 180 181//-------------------------------------------------------select()---------------------------------------------------------------------// 182 183 public void select(double latitude, double longitude) { 184 185 listItems.clear(); 186 187 String sql = "select data,username,comment from neardb ;"; 188 189 190 Cursor c = db.rawQuery(sql, null); 191 192 c.moveToFirst(); 193 194 for (int i = 0; i < c.getCount(); i++) { 195 //SQL文の結果から、必要な値を取り出す 196 197 in += date + " " + name + " " + comment + "\n"; 198 listItems.add(in); 199 } 200 201//-------------------------------------------------------ArrayAdapterにlistItemsをset----------------------------------------------------// 202 203 listView = (ListView) findViewById(R.id.list_view); 204 ArrayAdapter<String> adapterlist = new ArrayAdapter<String>(LocationActivity.this, android.R.layout.simple_list_item_1, listItems); 205 adapterlist.setDropDownViewResource(android.R.layout.simple_list_item_1); 206 listView.setAdapter(adapterlist); 207 208//--------------------------------------------setOnItemClickListener(new LocationActivity());------------------------------------------// 209 listView.setOnItemClickListener(new LocationActivity()); 210 211 //ArrayAdapterをspinnerで使ってた 212 c.moveToNext(); 213 214 } 215} 216

//このコードのように別途クラスを作成しなくてはいけないのでしょうか?

java

1public class ListView01 extends Activity { 2 /** Called when the activity is first created. */ 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 ListView list = (ListView)findViewById(R.id.list_view); 9 String[] items = {"Item1","Item2","Item3"}; 10 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list, items); 11 list.setAdapter(adapter); 12 list.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 13 // 項目がクリックされた時のハンドラ 14 @Override 15 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 16 // クリックされた時の処理を記述 17 String msg = "ItemClick : Item" + (position + 1); 18 Log.v("OnItemClick", msg); 19 } 20 }); 21 } 22}

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

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

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

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

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

yona

2017/05/10 03:54

エラーメッセージは省略しないでください。
edoooooo

2017/05/10 03:55

はい、修正します。申し訳ありません
yona

2017/05/10 04:04

省略しないとは全ての行を記載することですよ。1行なわけありません。少なくとも10数行はあるはずです。
edoooooo

2017/05/10 04:07

エラーメッセージではなく、 } catch (Throwable e) { System.out.println("予期しない例外が発生しました。:"+e);で取得したメッセージのことでした。間違えました。すみません
yona

2017/05/10 04:24

何でもかんでもcatchするとエラーの原因がわからなくなります。やめましょう。
edoooooo

2017/05/10 05:30

catchしないことで、長文のエラーが発生するのですね。そのことを考えたことがありませんでした。ありがとうございます。
guest

回答1

0

ベストアンサー

java

1listView.setOnItemClickListener(new LocationActivity());

Activityを自分でnewしてはいけません。正しくはこうです。

java

1listView.setOnItemClickListener(this);

投稿2017/05/10 03:52

swordone

総合スコア20649

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

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

edoooooo

2017/05/10 03:54

ありがとうございます。 修正して実行してみます。
edoooooo

2017/05/10 04:03

AlartDialogを表示することができました。 swordoneさんに、教えていただいた、一箇所を修正しただけで、解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問