2016-05-08 13 views
-1

こんにちは私は、AndroidのJava利用機能

パッケージcom.sourcebring.wordbringにメインクラスに別のクラスから機能をロードするための問題を抱えています。

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     // Load default xml 
     setContentView(R.layout.main); 

     ntfi Notifi_engine = new ntfi(); 


     Notifi_engine.Send_notifi("hi", "welcome", R.drawable.wb_logo); 

    } 


} 

、これは私がプログラム上のエラーを持っていないが、私はプロジェクトをコンパイルし、私はそれを実行したいときに、このコードで

package com.inc.project; 

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.TaskStackBuilder; 
import android.support.v4.app.NotificationCompat; 
import android.support.v4.app.NotificationCompat.Action; 
import android.content.Intent; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.support.v7.app.AppCompatActivity; 


public class ntfi extends AppCompatActivity { 

    public void Send_notifi(String Title, String Content, int Icon) 
    { 
     // Create notification handler 
     NotificationCompat.Builder notifi_Builder = new NotificationCompat.Builder(this) 
       .setSmallIcon(Icon) 
       .setContentTitle(Title) 
       .setContentText(Content); 

     Intent resultIntent = new Intent(this, ntfi.class); 

     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 

     stackBuilder.addParentStack(WordbringMainActivity.class); 

     stackBuilder.addNextIntent(resultIntent); 


     PendingIntent resultPendingIntent = 
       stackBuilder.getPendingIntent(
         0, 
         PendingIntent.FLAG_UPDATE_CURRENT 
       ); 
     notifi_Builder.setContentIntent(resultPendingIntent); 

     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     mNotificationManager.notify(0, notifi_Builder.build()); 
    } 
} 

私のクラスで、私のアンドロイドプログラムが停止しました。私はntfiクラスを使用いけないと私は

MainActivity 

にこの機能Send_notifiを使用する場合

はなく、成功し何の問題やプログラムの仕事はありません。私はこの機能を持ってほしいSend_notifiトップクラスのような別のクラスに...何が問題なのですか?

実行Androidアプリ

05-08 19:41:44.510 918-918/com.inc.project E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.inc.project/com.inc.project.MainActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
at android.app.ActivityThread.access$600(ActivityThread.java:122) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4340) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 
                     Caused by: java.lang.NullPointerException 
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127) 
at android.content.ComponentName.<init>(ComponentName.java:75) 
at android.content.Intent.<init>(Intent.java:3004) 
at com.inc.project.ntfi.Send_notifi(ntfi.java:27) 
at com.inc.project.MainActivity.onCreate(MainActivity.java:23) 
at android.app.Activity.performCreate(Activity.java:4465) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)  
at android.app.ActivityThread.access$600(ActivityThread.java:122)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)  
at android.os.Handler.dispatchMessage(Handler.java:99)  
at android.os.Looper.loop(Looper.java:137)  
at android.app.ActivityThread.main(ActivityThread.java:4340)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:511)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)  
at dalvik.system.NativeStart.main(Native Method)  
+0

適切なJava命名規則に従ってください。 LogCatの出力にエラーがないかチェックしてください。 – chRyNaN

答えて

0

これは動作しませんがNotificationCompat.Builder(...)Contextオブジェクトを必要とし、あなたが自分でntfiインスタンスを作成しましたので、(それがシステムによって作成されていないので、これは私のエラーです)AppCompatActivityを拡張しても有効なContextではありません。

あなたが代わりに行うことができますが、このです:

public class ntfi { 

public void Send_notifi(Context context, String Title, String Content, int Icon) { 
    NotificationCompat.Builder notifi_Builder = new NotificationCompat.Builder(context) 
      .setSmallIcon(Icon) 
      .setContentTitle(Title) 
      .setContentText(Content); 

    Intent resultIntent = new Intent(context, MainActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    stackBuilder.addParentStack(WordbringMainActivity.class); 
    stackBuilder.addNextIntent(resultIntent); 

    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    notifi_Builder.setContentIntent(resultPendingIntent); 

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(0, notifi_Builder.build()); 
    } 

と通知を表示する:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ntfi Notifi_engine = new ntfi(); 
     Notifi_engine.Send_notifi(this, "hi", "welcome", R.drawable.wb_logo); 
    } 
} 

また、サイドノートとして、あなたがクラスを開始し、Javaの命名規則を以下の点を考慮すべきです名前は大文字で、変数名には小文字を使用します。今のように、コードは読みにくいです。

+0

私はそれを変更しましたが、この行にエラーがあります(Intent resultIntent = new Intent(this、ntfi.class);)、getSystemService(Context.NOTIFICATION_SERVICE)でメソッド(getSystemService)を解決できません。 –

+0

ありがとうございました....解決済み –

0

ntfiAppCompatActivityまで延長する必要はありません。あなたが必要とするのは、ntfiクラスにあるstaticメソッドの数を定義し、Activityの中から呼び出すことだけです。この場合、これらのヘルパーメソッドにContextを渡す必要があります。この場合には、あなたがntfiをインスタンス化する必要がないこと ntfi.Send_notifi("hi", "welcome", R.drawable.wb_logo); 注 - その行を取り除く:

public class ntfi { 

public static void Send_notifi(Context context, String Title, String Content, int Icon) 
    { 
     // Create notification handler 
     NotificationCompat.Builder notifi_Builder = new NotificationCompat.Builder(context) 
       .setSmallIcon(Icon) 
       .setContentTitle(Title) 
       .setContentText(Content); 

     Intent resultIntent = new Intent(context, ntfi.class); 

     TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 

     stackBuilder.addParentStack(WordbringMainActivity.class); 

     stackBuilder.addNextIntent(resultIntent); 


     PendingIntent resultPendingIntent = 
       stackBuilder.getPendingIntent(
         0, 
         PendingIntent.FLAG_UPDATE_CURRENT 
       ); 
     notifi_Builder.setContentIntent(resultPendingIntent); 

     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

     mNotificationManager.notify(0, notifi_Builder.build()); 
    } 
} 

は、その後、あなたがこのようなSend_notifi機能を呼び出すことができます:ここでは、あなたのntfiクラスを変更することができる方法です。 ntfi Notifi_engine = new ntfi();

あなたのクラスにntfi(小文字)のような名前を付けることは、クラスの説明的な名前を考えてみるのは良いことではないでしょうか。

+0

ありがとうございました... –

+0

OK、クール、これは助けてうれしいです。あなたはそれが役に立つと思ったら答えを投票することができます。コーディングをお楽しみください! – ishmaelMakitla

関連する問題