java - getApplicationContext() method getting error -


i android beginner, making simple service example.

but in single code getapplicationcontext() method behaves differently, please check comment of mainactivity.

mainactivity.java

package com.avisingh.servicetest;  import android.content.dialoginterface; import android.content.intent; import android.support.v7.app.alertdialog; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button;  public class mainactivity extends appcompatactivity {  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      final button alertbutton = (button)findviewbyid(r.id.alert_btn);      alertbutton.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             alertdialog.builder builder = new alertdialog.builder(mainactivity.this); //if placing here getapplicationcontext() method getting error;             builder.settitle("warning");             builder.setmessage("are sure open media played in app?");              builder.setpositivebutton("ok", new dialoginterface.onclicklistener() {                 @override                 public void onclick(dialoginterface dialog, int which) {                     startactivity(new intent(getapplicationcontext(),playeractivity.class)); // here getapplicationcontext() , mainactivity.this both working                 }             });              builder.setnegativebutton("cancel", new dialoginterface.onclicklistener() {                 @override                 public void onclick(dialoginterface dialog, int which) {                     dialog.cancel();                 }             });              alertdialog alertdialog = builder.create();             alertdialog.show(); //getting error here.         }     });  } } 

playeractivity.java

package com.avisingh.servicetest;  import android.content.intent; import android.os.bundle; import android.support.annotation.nullable; import android.support.v7.app.appcompatactivity; import android.view.view; import android.widget.button;   public class playeractivity extends appcompatactivity{ @override protected void oncreate(@nullable bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.player_activity);      final button startbtn = (button)findviewbyid(r.id.start_btn);     final button stopbtn = (button)findviewbyid(r.id.stop_btn);      startbtn.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             startservice(new intent(getapplicationcontext(),myservices.class));         }     });      stopbtn.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             stopservice(new intent(getapplicationcontext(),myservices.class));         }     });  } } 

myservices.java

package com.avisingh.servicetest;  import android.app.service; import android.content.intent; import android.media.mediaplayer; import android.os.ibinder; import android.support.annotation.nullable;   public class myservices extends service { mediaplayer mediaplayer; @nullable @override public ibinder onbind(intent intent) {     //return null;     throw  new unsupportedoperationexception("not implemented"); }  @override public void oncreate() {     super.oncreate();     mediaplayer = mediaplayer.create(getapplicationcontext(),r.raw.one_man); }  @override public int onstartcommand(intent intent, int flags, int startid) {     mediaplayer.start();     return super.onstartcommand(intent, flags, startid); }  @override public void ondestroy() {     super.ondestroy();     mediaplayer.stop();  } } 

androidmanifest

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.avisingh.servicetest">  <application     android:allowbackup="true"     android:icon="@mipmap/ic_launcher"     android:label="@string/app_name"     android:roundicon="@mipmap/ic_launcher_round"     android:supportsrtl="true"     android:theme="@style/apptheme">     <activity android:name=".mainactivity">         <intent-filter>             <action android:name="android.intent.action.main" />              <category android:name="android.intent.category.launcher" />         </intent-filter>     </activity>     <activity android:name=".playeractivity"/>     <service android:name=".myservices"/> </application> 

activity_main

<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="com.avisingh.servicetest.mainactivity">  <button     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/alert_btn"     android:layout_centerhorizontal="true"     android:layout_margintop="40dp"     android:id="@+id/alert_btn"/>  </relativelayout> 

player_activity

<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent">  <button     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerhorizontal="true"     android:text="@string/start_btn"     android:id="@+id/start_btn"/>  <button     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerhorizontal="true"     android:layout_margintop="50dp"     android:text="@string/stop_btn"     android:id="@+id/stop_btn"/>  </relativelayout> 

error:

08-14 14:17:58.916 6874-6874/com.avisingh.servicetest e/androidruntime: fatal exception: main                                                                     process: com.avisingh.servicetest, pid: 6874                                                                     java.lang.illegalstateexception: need use theme.appcompat theme (or descendant) activity.                                                                         @ android.support.v7.app.appcompatdelegateimplv9.createsubdecor(appcompatdelegateimplv9.java:359)                                                                         @ android.support.v7.app.appcompatdelegateimplv9.ensuresubdecor(appcompatdelegateimplv9.java:328)                                                                         @ android.support.v7.app.appcompatdelegateimplv9.setcontentview(appcompatdelegateimplv9.java:289)                                                                         @ android.support.v7.app.appcompatdialog.setcontentview(appcompatdialog.java:83)                                                                         @ android.support.v7.app.alertcontroller.installcontent(alertcontroller.java:225)                                                                         @ android.support.v7.app.alertdialog.oncreate(alertdialog.java:257)                                                                         @ android.app.dialog.dispatchoncreate(dialog.java:373)                                                                         @ android.app.dialog.show(dialog.java:274)                                                                         @ com.avisingh.servicetest.mainactivity$1.onclick(mainactivity.java:42)                                                                         @ android.view.view.performclick(view.java:4759)                                                                         @ android.view.view$performclick.run(view.java:19770)                                                                         @ android.os.handler.handlecallback(handler.java:739)                                                                         @ android.os.handler.dispatchmessage(handler.java:95)                                                                         @ android.os.looper.loop(looper.java:135)                                                                         @ android.app.activitythread.main(activitythread.java:5247)                                                                         @ java.lang.reflect.method.invoke(native method)                                                                         @ java.lang.reflect.method.invoke(method.java:372)                                                                         @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:912)                                                                         @ com.android.internal.os.zygoteinit.main(zygoteinit.java:707) 

//if placing here getapplicationcontext() method getting error 

correct. because application object not know themes, , dialog needs theme based on theme.appcompat. use activity context creating dialogs.

you may wish read dave smith's awesome blog post on uses of different types of context object more on this.


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -