J'aime faire démarrer l'application pendant que l'utilisateur déverrouille son téléphone.Lorsque je commence à débloquer le téléphone, il ne se passe rien, et quand je me connecte l'application (après la connexion, il va exécuter ThirdActivity.java), l'application est arrêtée .Le journal des erreurs est présentée comme suit:Comment appeler les services en utilisant un événement de déverrouillage dans Android?
11-28 14:28:52.846: E/AndroidRuntime(6439): FATAL EXCEPTION: main
11-28 14:28:52.846: E/AndroidRuntime(6439): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.project/com.example.android.project.ThirdActivity}: java.lang.NullPointerException: println needs a message
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.ActivityThread.access$600(ActivityThread.java:139)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.os.Looper.loop(Looper.java:156)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.ActivityThread.main(ActivityThread.java:4987)
11-28 14:28:52.846: E/AndroidRuntime(6439): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 14:28:52.846: E/AndroidRuntime(6439): at java.lang.reflect.Method.invoke(Method.java:511)
11-28 14:28:52.846: E/AndroidRuntime(6439): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-28 14:28:52.846: E/AndroidRuntime(6439): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-28 14:28:52.846: E/AndroidRuntime(6439): at dalvik.system.NativeStart.main(Native Method)
11-28 14:28:52.846: E/AndroidRuntime(6439): Caused by: java.lang.NullPointerException: println needs a message
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.util.Log.println_native(Native Method)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.util.Log.d(Log.java:138)
11-28 14:28:52.846: E/AndroidRuntime(6439): at com.example.android.project.ThirdActivity.onCreate(ThirdActivity.java:52)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.Activity.performCreate(Activity.java:4538)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
11-28 14:28:52.846: E/AndroidRuntime(6439): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161)
11-28 14:28:52.846: E/AndroidRuntime(6439): ... 11 more
Avant d'ajouter les codes suivants, il fonctionne comme d'habitude:
intentFilter = new IntentFilter();
intentFilter.addAction(MyService.MY_ACTION);
registerReceiver(intentReceiver, intentFilter);
private BroadcastReceiver intentReceiver = new BroadcastReceiver() {...};
protected void displayNotification(){...}
quelqu'un a des conseils à ce problème?
Voici StartMyServiceAtBootReceiver.java
public class StartMyServiceAtBootReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
HttpTest(context);
}
}
public static boolean isNetworkAvailable(Context startMyServiceAtBootReceiver) {
Context context = startMyServiceAtBootReceiver.getApplicationContext();
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
public static void HttpTest(final Context startMyServiceAtBootReceiver)
{
if(isNetworkAvailable(startMyServiceAtBootReceiver)){
Intent start = new Intent(startMyServiceAtBootReceiver, MyService.class);
start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startMyServiceAtBootReceiver.startService(start);
}
}
}
MyService.java
public class MyService extends Service{
int counter = 0;
static final int UPDATE_INTERVAL = 15000;
private Timer timer = new Timer();
DefaultHttpClient httpclient;
HttpPost httppost;
String line,result;
HttpResponse response;
InputStream is;
BufferedReader reader;
StringBuilder sb;
final static String MY_ACTION = "MY_ACTION";
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public int onStartCommand(Intent intent, int flags, int startId){
doSomethingRepeatedly();
return START_STICKY;
}
private void doSomethingRepeatedly(){
timer.scheduleAtFixedRate(new TimerTask(){
public void run(){
// Log.d("MyService", String.valueOf(++counter));
try{
httpclient = new DefaultHttpClient();
httppost = new HttpPost("http://www.kryptoquest.com/testing/checking.php");
response = httpclient.execute(httppost);
is = response.getEntity().getContent();
}catch(Exception e){
Log.e("log_tag", "Error:"+e.toString());
}
//convert response to string
try{
reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
sb = new StringBuilder();
line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
Log.d("test",sb.toString());
is.close();
result = sb.toString();
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("DATAPASSED", result);
sendBroadcast(intent);
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
}
},10000,UPDATE_INTERVAL);
}
public void onDestroy(){
super.onDestroy();
if(timer != null){
timer.cancel();
}
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
}
}
ThirdActivity.java
public class ThirdActivity extends ListActivity{
Bundle b;
String user,line,result,datapassed;
DefaultHttpClient httpclient;
HttpPost httppost;
HttpResponse response;
InputStream is = null;
BufferedReader reader;
StringBuilder sb;
ArrayList<NameValuePair> nameValuePairs;
ListView lv;
IntentFilter intentFilter;
int notification = 1;
String str = "";
String[] data;
int dlength;
public void onCreate(Bundle savedInstancesState){
super.onCreate(savedInstancesState);
setContentView(R.layout.list_screen);
lv = (ListView) findViewById(android.R.id.list);
Log.d("dg",user);
getList();
intentFilter = new IntentFilter();
intentFilter.addAction(MyService.MY_ACTION);
registerReceiver(intentReceiver, intentFilter);
user = getIntent().getExtras().getString("user");
}
public void getList(){
new Thread(){
public void run(){
try{
httpclient = new DefaultHttpClient();
httppost = new HttpPost("http://www.kryptoquest.com/tracker/friendlist.php");
response = httpclient.execute(httppost);
is = response.getEntity().getContent();
}catch(Exception e){
Log.e("log_tag", "Error:"+e.toString());
}
//convert response to string
try{
reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
sb = new StringBuilder();
line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
Log.d("test",sb.toString());
is.close();
result = sb.toString();
final String[] friend = result.split("[*]");
runOnUiThread(new Runnable()
{
public void run(){
setListAdapter(new ArrayAdapter<String>(ThirdActivity.this,android.R.layout.simple_list_item_1,friend));
}
});
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
}
}.start();
}
private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
datapassed = intent.getStringExtra("DATAPASSED");
if(datapassed.length()>0){
data = datapassed.split("[*]");
dlength = data.length;
for(int i=0;i<dlength;i++){
if(i==dlength-1){
str += String.valueOf(data[i]);
}else{
str += String.valueOf(data[i]) + ",";
}
}
Log.d("dataServices",str);
displayNotification();
str = "";
}
}
};
protected void displayNotification(){
Intent i = new Intent(this,NotificationView.class);
i.putExtra("notification", notification);
i.putExtra("name",str);
Log.d("String",str);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager mnotis =(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notis = new Notification(R.drawable.notices2,"Reminder:You have " + dlength + " new friend request",System.currentTimeMillis());
notis.setLatestEventInfo(this,"Friend Request", str + "has sent you a friend request",pi);
notis.vibrate = new long[]{100,250,100,500};
mnotis.notify(0, notis);
}
}
Merci.C'est le travail !! –