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

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

ただいまの
回答率

89.23%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,261

Bebeit

score 11

前提・実現したいこと

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

強制終了の問題を解決したいのですが,
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/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Bebeit

    2017/01/20 15: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 15:25

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

    キャンセル

  • Bebeit

    2017/01/20 15:28

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

    キャンセル

回答 1

checkベストアンサー

0

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/21 08: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;
    }
    }

    ヒントいただけたので,ちょっと,難読化されているままですが,
    ソースおってみようと思います。

    キャンセル

  • 2017/01/21 12:16

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

    キャンセル

  • 2017/01/21 19:50

    yona 様

    連絡がおそくなり,申し訳ありません。
    教えて頂きました,mapping.txtありました,見ている箇所を勘違いしておりました。

    ログを解析していたところ,ロジックのミスがあり,Nullとなる箇所を見つけ,
    さきほど,修正してアプリが動いたという連絡を頂きました。

    大変お手数お掛けしましたが,相談させていただき,一人で悩んでいたところで,
    心細くいたところを救っていただきました。
    とても感謝しています。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る