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

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

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

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

Q&A

3回答

1962閲覧

ActiveAndroidのtablenameのnull

TakamasaAwai

総合スコア73

Android

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

0グッド

0クリップ

投稿2016/03/12 14:28

java.lang.String com.activeandroid.TableInfo.getTableName()' on a null object reference
というエラーが出ます。
tableを設定しているクラスは

lang

1package com.lifeistech.android.techmemotyou; 2 3 4import com.activeandroid.Model; 5import com.activeandroid.annotation.Column; 6import com.activeandroid.annotation.Table; 7 8@Table(name = "memo_table") 9public class MemoDB extends Model{ 10 @Column (name = "title") 11 public String title; 12 13 @Column (name = "memo") 14 public String memo; 15 16 @Column (name = "date") 17 public String date; 18 19 @Override 20 public String toString(){ 21 return title; 22 } 23}

という風になっています。また、テーブルに保存された情報を引き出すlistviewのアダプターを設定するActivityは

lang

1package com.lifeistech.android.techmemotyou; 2 3import android.content.Intent; 4import android.support.v7.app.AppCompatActivity; 5import android.os.Bundle; 6import android.view.Menu; 7import android.view.MenuItem; 8import android.widget.ArrayAdapter; 9import android.widget.ListView; 10 11import com.activeandroid.query.Select; 12 13import java.util.List; 14 15public class MainActivity extends AppCompatActivity { 16 17 ListView listview; 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_main); 22 listview = (ListView)findViewById(R.id.memo_list); 23 } 24 @Override 25 public void onResume(){ 26 super.onResume(); 27 setMemoList(); 28 } 29 30 void setMemoList(){ 31 List<MemoDB> memoList = new Select().from(MemoDB.class).execute(); 32 ArrayAdapter<MemoDB> adapter = new ArrayAdapter<>(getApplicationContext(), R.layout.memo_row, memoList); 33 listview.setAdapter(adapter); 34 } 35 36 37 38 @Override 39 public boolean onCreateOptionsMenu(Menu menu) { 40 getMenuInflater().inflate(R.menu.mamu_main, menu); 41 return true; 42 } 43 @Override 44 public boolean onOptionsItemSelected(MenuItem item) { 45 46 int id = item.getItemId(); 47 48 if (id == R.id.main_create) { 49 50 Intent intent = new Intent(MainActivity.this, MemoCreateActivity.class); 51 startActivity(intent); 52 53 return true; 54 } 55 return super.onOptionsItemSelected(item); 56 } 57} 58

というようになっています。エラーでは、getTableName()が使われていないとか、何もしていされていないと怒られているようですが、これをどう使えば良いのでしょうか。

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

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

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

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

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

guest

回答3

0

こんにちは、もう解決されていると思いますが
最近同じような現象が起きたのでメモしておきます。

Android 5.X系とAndroid 4.0X系では、ランタイムが異なります。
このライブラリはAndroid 4.0X系で作られたライブラリなので、ランタイムの違いによる動作不具合が発生しているようです。

ActiveAndroidは起動時に、リフレクションを使ってModel一覧をスキャンしています。
Android 5.XだとリModel一覧のスキャンに失敗しているようです。
そのため、Modelを継承したクラスを作っても、Modelが無いよと怒られてしまうようです。

Applicationを継承したクラスを作って、そちらに1つずつModelを追加していくことでこの現象を回避する事が出来るようです。

投稿2016/05/09 10:03

redhat98

総合スコア236

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

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

0

はじめまして。
質問から日数が立っていますが、もし解決されていないようでしたら
http://qiita.com/kwmt@github/items/b70a5463f0a0d104b346
上記サイトを参考にされると良いかもしれません。
どうやら、最近の更新でModelのクラスを指定してあげないといけなくなったようです。

投稿2016/05/08 05:18

RitsukiGoto

総合スコア99

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

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

0

ActiveAndroidを使うための初期化はしましたか?

投稿2016/03/12 14:33

yona

総合スコア18155

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

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

TakamasaAwai

2016/03/12 14:45

ご回答ありがとうございます。 appファイル内のbuild.gradleには、 repositories{ mavenCentral() maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' }を追加し、また、Androidmanufestには <application android:name="com.activeandroid.app.Application" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="AA_DB_NAME" android:value="memo.db" /> <meta-data android:name="AA_DB_VERSION" android:value="1" /> を追加しました。これでActiveAndroidのライブラリの初期設定はしたと思いますが,,,
yona

2016/03/12 17:54

準備は正しいようですね。 どうやらバージョンアップした際に問題が発生するようになっているようです。 MemoDBに引数無しのコンストラクタを作成し。super()を呼ぶことで解決している人やアプリケーションクラスを継承して初期化することで解決した人もいるようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問