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

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

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

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

Q&A

解決済

1回答

2378閲覧

Android Viewpagerを利用していて,起動時に強制終了する端末が一部ある問題。

Bebeit

総合スコア11

Android

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

0グッド

0クリップ

投稿2017/01/20 05:02

###前提・実現したいこと
現在,一部端末において,起動せずに強制終了してしまうという
問題が解決できず困っています。

強制終了の問題を解決したいのですが,
Android開発を独学での学習しているため,
正しくコードがかけていない箇所があるかと思っています。

実機2機やエミュレータでは,強制終了しないため,
問題箇所の原因がつかめずにいます。

###発生している問題・エラーメッセージ
java.lang.NullPointerException: Attempt to invoke virtual method 'int jp.bebeit.fuyokeisan.a.a()' on a null object reference
at jp.bebeit.fuyokeisan.e.l(Unknown Source)
at jp.bebeit.fuyokeisan.e.k(Unknown Source)
at jp.bebeit.fuyokeisan.e.a(Unknown Source)
at jp.bebeit.fuyokeisan.e.onStart(Unknown Source)
at android.support.v4.app.Fragment.performStart(Unknown Source)
at android.support.v4.app.v.a(Unknown Source)
at android.support.v4.app.v.a(Unknown Source)
at android.support.v4.app.v.d(Unknown Source)
at android.support.v4.app.v.f(Unknown Source)
at android.support.v4.app.v.b(Unknown Source)
at android.support.v4.app.h.d(Unknown Source)
at android.support.v4.app.x.b(Unknown Source)
at android.support.v4.view.ViewPager.a(Unknown Source)
at android.support.v4.view.ViewPager.c(Unknown Source)
at android.support.v4.view.ViewPager.onMeasure(Unknown Source)
at android.view.View.measure(View.java:17520)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17520)
at android.support.v4.widget.DrawerLayout.onMeasure(Unknown Source)
at android.view.View.measure(View.java:17520)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.support.v7.widget.ContentFrameLayout.onMeasure(Unknown Source)
at android.view.View.measure(View.java:17520)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17520)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17520)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17520)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2563)
at android.view.View.measure(View.java:17520)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2005)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1170)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1376)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1058)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5796)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
###該当のソースコード

import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.TabHost; import android.widget.TabWidget; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private Resources res; private SectionsPagerAdapter mSectionsPagerAdapter; public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public android.support.v4.app.Fragment getItem(int position) { switch (position) { case 0: return new RecordFragment(); case 1: return new PlanFragment(); } return null; } @Override public int getCount() { return 2; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return res.getString(R.string.record); case 1: return res.getString(R.string.plan); } return null; } } private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); res = getResources(); // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.container); mViewPager.setAdapter(mSectionsPagerAdapter); final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); tabHost.setup(); //タブの設定変更 TabWidget tabWidget = (TabWidget) findViewById(android.R.id.tabs); LayoutInflater inflater = LayoutInflater.from(this); for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { TextView tv = (TextView) inflater.inflate(R.layout.tab_widget, tabWidget, false); tv.setText(mSectionsPagerAdapter.getPageTitle(i)); tv.setGravity(Gravity.CENTER); tabHost.addTab(tabHost .newTabSpec(String.valueOf(i)) .setIndicator(tv) .setContent(android.R.id.tabcontent)); } tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { mViewPager.setCurrentItem(Integer.valueOf(tabId)); } }); mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); tabHost.setCurrentTab(position); } }); } }

###試したこと
私なりに調べたところ,ViewPagerあたりに問題があるのではないかと
考えておりますが,もしよろしければ,知恵をお借りできたらと思い
ご相談させていただいています。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

yona

2017/01/20 05:57

動く端末と動かない端末の詳細情報を質問に追記してください。
Bebeit

2017/01/20 06:24

ご連絡ありがとうございます。また、お手数お掛けして申し訳ありません。
Bebeit

2017/01/20 06:24

動かない端末は,Xperia Z3(SO-01G) 1 メーカー Sony Android バージョン Android 4.4 RAM(MB) 3072 画面サイズ 1080 × 1920 画面密度(dpi) 480 OpenGL ES バージョン 3.0 ネイティブ プラットフォーム armeabi-v7a CPU メーカー Qualcomm CPU モデル MSM8974AC
Bebeit

2017/01/20 06:25

Xperia X Performance(502SO) 1 メーカー Sony Android バージョン Android 6.0 RAM(MB) 3072 画面サイズ 1080 × 1920 画面密度(dpi) 480 OpenGL ES バージョン 3.1 ネイティブ プラットフォーム armeabi-v7a CPU メーカー Qualcomm CPU モデル MSM8996
Bebeit

2017/01/20 06:25

AQUOS EVER SH-04G(SH-04G) 1 メーカー SHARP Android バージョン Android 5.0 RAM(MB) 2000 画面サイズ 720 × 1280 画面密度(dpi) 320 OpenGL ES バージョン 3.0 ネイティブ プラットフォーム armeabi-v7a CPU メーカー Qualcomm CPU モデル MSM8926
Bebeit

2017/01/20 06:25

の3つがクラッシュのレビューとしてあがっています。動く端末は,
Bebeit

2017/01/20 06:28

NTT DOCOMO NEC N-07D(Android 4.1.2), NTT DOCOMO FUJITSU F-04G(Android 6.0.1)です。
guest

回答1

0

ベストアンサー

プロガードを外した状態のログがないと何とも言えませんね。

ViewPagerの中でどの様な処理をしているかを教えてください。
また、大きなサイズの画像を読み込んだりするプログラムですか?

各フラグメントが何をするフラグメントかを具体的に書いてください。

投稿2017/01/20 06:58

編集2017/01/20 07:00
yona

総合スコア18155

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

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

Bebeit

2017/01/20 07:22

ご回答,ありがとうございます。お手数お掛けしています。 プロガードをはずした状態で問題を再現する実機??などが手元になく, 問題が再現できずにいます。 ViewPagerの中では,フラグメントを切り替えていますが, 大きな画像などは利用しておらず,計算をしてテキストを表示している程度のものです。 お手数お掛けするかと思いますが,アプリのURLを以下につけさせていただきます。 https://play.google.com/store/apps/details?id=jp.bebeit.fuyokeisan 記録タブ,計画タブともに 扶養範囲の計算をするために,編集のボタンをおして, EditTextにより,数値データを取得後,データを計算して,再表示をしています。
yona

2017/01/20 07:34

プロガードの暗号化されたクラス名やメソッド名を復号する方法があったと思いますが、それをできませんか? 特定の入力値の場合にエラーが発生していると考えられます。 intが戻り値のメソッド内が怪しいようです。
Bebeit

2017/01/20 08:44

yona 様 ご回答ありがとうございます。お手数お掛けします。 プロガードの暗号化されたクラス名やメソッド名を複合する方法が わからないです,すみません。 http://qiita.com/gfx/items/4ba4515f1ca39e7e4349 の記事をみつけたのですが,mapping.txtがどこにあるか見つからないという状態です。。。 apkからクラスファイルにもどして,Java Decompilerにて,e.classを確認したところ, private void l() { TextView localTextView = (TextView)this.d.findViewById(2131493013); if ((!a) && (localTextView == null)) { throw new AssertionError(); } int i1 = this.q.getInt("kSetKeikaku", 1000000) / 10000; localTextView.setText(String.valueOf(this.l.a() + this.o.getString(2131034240, new Object[] { String.valueOf(i1) }))); } という箇所があり,!aの箇所でおちているのかと思いますが, そのaの箇所も難読化されており,ちょっと追跡が困難というところです。 int の戻り値があるメソッドを確認してみます。 話がすこしずれてしまうかもしれませんが, このエラーなのですが,起動時に強制終了されて,はきだされたエラーなのですが, ある端末は動いて,ある端末では動かないという場合は,やはり起こりうることなのでしょうか。 起動時に入力されるint型という箇所では,動いている端末も動かないといわれる端末も 同様のプログラムを通るかと思いますが,端末ごとで処理の流れ??というものがかわるものなのでしょうか。 すみません,まだよくわからないことがおおく,経験が浅いため, まとはずれのような質問をしているかもしれません。
yona

2017/01/20 10:05

build/outputs/proguard/release/mapping.txtにありますよ。 端末に原因があるかはエラーログが読めない限り断言はできないですが、処理次第ではありえると思いますよ。
Bebeit

2017/01/20 12:45

yona 様 ご回答ありがとうございます。 build/outputs/proguard/release/mapping.txt はきだしていないかもしれないです。みつけられないです。 設定が悪いのだと思います,調べてみます。 処理次第ではありえるかもしれないんですね,なるほど。 そうなると,対応はとても難解ですね。。。 mapping.txtを見つけて,ログを確認できるように試してみます。
yona

2017/01/20 13:49

aクラスにaメソッドはありますか?
Bebeit

2017/01/20 23:52

yona 様 いつもありがとうございます。 aクラスは,下のようになっています,よみづらいです。。。 aメソッドはありそうです。 public class a { private int a; private int[] b; private int[] c; private int[] d; public a(int paramInt, int[] paramArrayOfInt1, int[] paramArrayOfInt2, int[] paramArrayOfInt3) { this.a = paramInt; this.b = paramArrayOfInt1; this.c = paramArrayOfInt2; this.d = paramArrayOfInt3; } protected int a() { return this.a; } protected int a(int paramInt) { return this.b[paramInt]; } protected void a(int paramInt1, int paramInt2) { this.b[paramInt1] = paramInt2; } protected int b() { int k = 0; int[] arrayOfInt = this.b; int m = arrayOfInt.length; int j = 0; int n; for (int i = 0; j < m; i = n + i) { n = arrayOfInt[j]; j += 1; } arrayOfInt = this.c; m = arrayOfInt.length; j = i; i = k; while (i < m) { j += arrayOfInt[i]; i += 1; } return j; } protected int b(int paramInt) { return this.c[paramInt]; } protected void b(int paramInt1, int paramInt2) { this.c[paramInt1] = paramInt2; } protected int c() { return b() + f(); } protected int c(int paramInt) { return this.d[paramInt]; } protected void c(int paramInt1, int paramInt2) { this.d[paramInt1] = paramInt2; } protected int d() { int i = 0; int[] arrayOfInt = this.b; int k = arrayOfInt.length; int j = 0; while (i < k) { j += arrayOfInt[i]; i += 1; } return j; } protected int e() { int i = 0; int[] arrayOfInt = this.c; int k = arrayOfInt.length; int j = 0; while (i < k) { j += arrayOfInt[i]; i += 1; } return j; } protected int f() { int i = 0; int[] arrayOfInt = this.d; int k = arrayOfInt.length; int j = 0; while (i < k) { j += arrayOfInt[i]; i += 1; } return j; } } ヒントいただけたので,ちょっと,難読化されているままですが, ソースおってみようと思います。
yona

2017/01/21 03:16

コンストラクタaに渡されているparamArrayOfInt1が怪しいですね。 ここを基点にしてソースを追うといいと思いますよ。
Bebeit

2017/01/21 10:50

yona 様 連絡がおそくなり,申し訳ありません。 教えて頂きました,mapping.txtありました,見ている箇所を勘違いしておりました。 ログを解析していたところ,ロジックのミスがあり,Nullとなる箇所を見つけ, さきほど,修正してアプリが動いたという連絡を頂きました。 大変お手数お掛けしましたが,相談させていただき,一人で悩んでいたところで, 心細くいたところを救っていただきました。 とても感謝しています。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問