2017-07-05 7 views
0

ImageViewや他のビューをプログラムで初期化できますか?setContentView(R.layout.activity_main); android ??setcontentviewの前にImageViewをプログラムで作成できます。android

実際に私は、世界的に

このような
MyInAppPurchaseBilling myInAppPurchaseBilling = new MyInAppPurchaseBilling(MenuClass.this); 

のonCreateメソッドの前にカスタムクラス(ない活動) のインスタンスを取得していますし、そのクラスのコンストラクタに私は私の好みのクラスを初期化するために、そのコンテキストを使用する必要が

ここで
public MyInAppPurchaseBilling(Activity launcher) { 
     this.activity = launcher; 
     tinyDB= new TinyDB(launcher); 
    } 

は私が

07-05 17:22:01.852 9660-9660/? E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.write.urdu.poetry.urdutexteditor, PID: 9660 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.write.urdu.poetry.urdutexteditor/com.write.urdu.poetry.urdutexteditor.MenuClass}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
    at android.app.ActivityThread.access$900(ActivityThread.java:157) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5551) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
    at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133) 
    at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:375) 
    at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:370) 
    at com.write.urdu.poetry.urdutexteditor.TinyDB.<init>(TinyDB.java:55) 
    at com.write.urdu.poetry.urdutexteditor.inapppurchase.MyInAppPurchaseBilling.<init>(MyInAppPurchaseBilling.java:48) 
    at com.write.urdu.poetry.urdutexteditor.MenuClass.<init>(MenuClass.java:38) 
    at java.lang.Class.newInstance(Native Method) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1068) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  
    at android.app.ActivityThread.access$900(ActivityThread.java:157)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5551)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)  
に直面していますエラーの私のlogcatですあなたがしなければならない何
+0

ヌル「コンテキスト」に起因するNPEにはどのように「イメージビュー」が関係していますか? – Pavlus

+0

Imageviewはちょうど私の問題を作成するコードの例として使用されています。MyInAppPurchaseBillingクラスのオブジェクトをそのコンストラクタを呼び出し、そのコンストラクタのTinyDBのインスタンスを作成することによってグローバルに作成します。すぐに私はどのように私はそれを行う答えを更新します...迅速な応答のおかげで – natiqjavid

答えて

0

は、i)は、setContentView前MenuClassのonCreate()メソッド(中TinyDBを初期化し、私のMenuClass活動コードであり、プリファレンスクラスから

public class MenuClass extends Activity { 

TinyDB tinyDB;  
    MyInAppPurchaseBilling myInAppPurchaseBilling = new MyInAppPurchaseBilling(MenuClass.this); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     myInAppPurchaseBilling.onCreate(); 

    tinyDB= new TinyDB(MenuClass.this); 
     if (!tinyDB.getBoolean(Constant.isAdsDisabled)) { 
//do your work 
     } 
     setContentView(R.layout.activity_menu_class); 
    } 
} 

を保存したブール値を取得した後、私の仕事を行なったし、これは私のMyInAppPurchaseBillingのコードですクラスは私のコンストラクタで何もしなかったが、onCreateの別個のメソッドを作成し、アクティビティのonCreateとTinyDBを初期化し、MenuClass onCreateのこのクラスのonCreateメソッドをsuper。*** lineの後に呼び出しました。 MyInAppPurchaseBillingクラスは、アプリケーションの起動時にboolean値を正常に挿入し、Menuclassでそのブール値を取得した後、さらに処理するようになりました

 public class MyInAppPurchaseBilling { 

      private TinyDB tinyDB;  
      Activity activity; 

      public MyInAppPurchaseBilling(Activity launcher) { 
       this.activity = launcher; 
      } 

      public void onCreate() { 
       tinyDB= new TinyDB(activity); 
    } 
} 
0

View view = getLayoutInflater().inflate(R.layout.activity_main, null, false); 
    imageView = (ImageView) view.findViewById(R.id.image); 

    setContentView(view); 
+0

これはその選択肢かもしれないが、私の質問は異なっていた私は完全にxmlファイルを使用せずにプログラムで言いましたメソッドを膨らませて – natiqjavid

0

はこれを試してみてくださいです:

ここ
View view = View.inflate(this, R.layout.activity_main, null); // view Exists after this code 
TextView t = (TextView) view.findViewById(R.id.text); 
setContentView(view); 
t.setText("something"); 

あなたはfindViewById()setContentView()前に呼び出され見ることができます。しかし、それは膨らんだが、それはあなたを助けるかもしれないので、ビューが存在します。

1

MenuClassのこのコンストラクタを実行している間にMyInAppPurchaseBillingオブジェクトが作成されていますか?この場合(そしておそらくonCreate()がMenuClass.thisで呼び出されるまでですが、これについてはわかりません)Activityオブジェクト内のコンテキスト(この場合はMenuClass.thisという)はまだ設定されていません。ここ

+0

はい、私はすでに同じ考え方で私の問題を解決しました、はいMyInAppPurchaseBillingクラスオブジェクトはエラーなしで正常に作成されましたが、そのコンストラクタ内のTinyDatabase Preferenceクラスインスタンスは、MenuClass(アクティビティ)、onCreate()私の完全な答えをチェックする – natiqjavid

関連する問題