Android:带有AlarmManager和Service的AsyncTask

天蓝色

我想每隔60秒定期使用HttpURLConnection api将JSON字符串发布到localhost服务器(WAMP),以将其插入数据库中。因此,我正在从计时器方法执行MyAsyncTask。在AlarmManager和Service的帮助下实现该方法是更好的方法,还是足以满足我的目的?

感谢您的帮助。

PostData类:

 package com.bustracker;

    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.HttpURLConnection;
    import java.net.URL;

    import android.os.AsyncTask;
    import android.os.Handler;

        public class PostData {
            String jSONString;
            Handler handler = new Handler();

            public PostData(String jSONString) {
                super();
                this.jSONString = jSONString;
            }

            public String getjSONString() {
                return jSONString;
            }

            public void setjSONString(String jSONString) {
                this.jSONString = jSONString;
            }

      public void timer() {

    new Thread(new Runnable() {
        @Override
        public void run() {
            boolean run = true;
            while (run) {
               handler.postDelayed(new Runnable() {
                   @Override
                   public void run() {
                       new MyAsyncTask().execute(jSONString);
                   }
               }, 5000);
            }
        }
    }).start();
}

            class MyAsyncTask extends AsyncTask<String, Integer, Void> {

                @Override
                protected Void doInBackground(String... params) {
                    // TODO Auto-generated method stub

                    try {
                        //This is the ip address of my laptop wifi because I am running the app in my device and I want to send the data to the localhost server(WAMP). 
                        URL myUrl = new URL("http://192.168.127.56/webservice"); 
                        HttpURLConnection myConnection = (HttpURLConnection) myUrl
                                .openConnection();
                        myConnection.setRequestMethod("POST");
                        myConnection.setDoOutput(true);
                        myConnection.setUseCaches(false);
                        myConnection.setConnectTimeout(10000);
                        myConnection.setReadTimeout(10000);
                        myConnection.setRequestProperty("Content-Type",
                                "application/json");
                        myConnection.connect();
                        // create data output stream
                        DataOutputStream wr = new DataOutputStream(
                                myConnection.getOutputStream());
                        // write to the output stream from the string
                        wr.writeBytes(jSONString);
                        wr.close();
                    } catch (IOException e) {

                        e.printStackTrace();
                    }
                    return null;

                }

            }

        }

传递给PostData类的JSON字符串:

    {
      "latitude":41.86907321,
      "longitude":16.66542435,
      "formatted":"22.04.2015 11:11:00",
       "route":4
    }

编辑:

该代码在MainActivity的内部类“ MyLocationListern”的onChanedLocation中被调用:

        String jSONString = convertToJSON(pLong, pLat, formatted);
        PostData sender = new PostData(jSONString);             
        Intent intent3 = new Intent(MainActivity.this, PostData.class);
        PendingIntent pintent3 = PendingIntent.getService(getApplicationContext(), 0, intent3, 0);
        AlarmManager alarm3 = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Calendar cal = Calendar.getInstance();
        // for 30 mint 60*60*1000
        alarm3.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                1000, pintent3);

        startService(new Intent(getBaseContext(), PostData.class));

具有IntentService的新PostData类:

package com.bustracker;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.IntentService;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Handler;

public class PostData extends IntentService {
    String jSONString;
    Handler handler = new Handler();

    public PostData(String jSONString) {
        super("some");
        this.jSONString = jSONString;
    }

    public String getjSONString() {
        return jSONString;
    }

    public void setjSONString(String jSONString) {
        this.jSONString = jSONString;
    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new MyAsyncTask().execute(jSONString);

        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub

    }

    class MyAsyncTask extends AsyncTask<String, Integer, Void> {

        @Override
        protected Void doInBackground(String... params) {
            // TODO Auto-generated method stub

            try {
                //This is the ip address of my laptop wifi because I am running the app in my device and I want to send the data to the localhost server(WAMP). 
                URL myUrl = new URL("http://192.168.x.x/webservice"); 
                HttpURLConnection myConnection = (HttpURLConnection) myUrl
                        .openConnection();
                myConnection.setRequestMethod("POST");
                myConnection.setDoOutput(true);
                myConnection.setUseCaches(false);
                myConnection.setConnectTimeout(10000);
                myConnection.setReadTimeout(10000);
                myConnection.setRequestProperty("Content-Type",
                        "application/json");
                myConnection.connect();
                // create data output stream
                DataOutputStream wr = new DataOutputStream(
                        myConnection.getOutputStream());
                // write to the output stream from the string
                wr.writeBytes(jSONString);
                wr.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
            return null;

        }

    }



}
vishal jangid

首先,我们创建这样的服务

public class ChatSevice extends IntentService{

    public ChatSevice() {
        super("Some");
    }



    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub

        //this is asynk task class
        new ChatConnect(ChatSevice.this).execute();

        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub

    }




}

现在以这种方式调用此服务

Intent intent3 = new Intent(this, ChatSevice.class);
        PendingIntent pintent3 = PendingIntent.getService(this, 0, intent3, 0);
        AlarmManager alarm3 = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        // for 30 mint 60*60*1000
        alarm3.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                1000, pintent3);

        startService(new Intent(getBaseContext(), ChatSevice.class));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Service和AlarmManager崩溃

来自分类Dev

带有Spring Web服务的Android AsyncTask

来自分类Dev

带有嵌套asynctask的Android类

来自分类Dev

Android AlarmManager无法唤醒电话(带有或不带有WakeLock)

来自分类Dev

带有AsyncTask的Espresso

来自分类Dev

android中带有AsyncTask的两个依赖的HttpUrlConnection

来自分类Dev

Android:带有预览回调的Camera Asynctask

来自分类Dev

带有上下文的AsyncTask的Android startActivityForResult

来自分类Dev

带有AsyncTask的Android Fragment在Activity中提交后为null

来自分类Dev

带有Asynctask的无尽RecyclerView

来自分类Dev

Android Asynctask 和 runOnUiThread

来自分类Dev

带有selection和selectionArgs []的Android CursorLoader

来自分类Dev

带有Android和Google地图的TileOverlay

来自分类Dev

带有PageTransformer和SceneTransition的Android ViewPager

来自分类Dev

Android:带有RippleEffect和StateListAnimator的<include>

来自分类Dev

带有截击和JSON的android

来自分类Dev

带有selection和selectionArgs []的Android CursorLoader

来自分类Dev

带有Android和Google地图的TileOverlay

来自分类Dev

带有 Android SDK 的 AmazonSQSClientBuilder 和 AWSStaticCredentialsProvider

来自分类Dev

带有nginx和.NET核心服务的Service Fabric

来自分类Dev

与AlarmManager和WakeLocks有关的查询

来自分类Dev

在Android中使用AlarmManager和BroadcastReceiver

来自分类Dev

Android暂停服务,线程,Asynctask?使用带有延迟的处理程序吗?

来自分类Dev

带有ArrayAdapter的Android AsyncTask给出错误“无法解析构造函数”

来自分类Dev

Android Service与带有网络访问线程的简单类

来自分类Dev

Android AsyncTask示例和说明

来自分类Dev

Android Activity ASyncTask和onCancelled

来自分类Dev

AsyncTask和JSON-Android

来自分类Dev

Android AsyncTask和Mockito(或PowreMockito)

Related 相关文章

  1. 1

    Android Service和AlarmManager崩溃

  2. 2

    带有Spring Web服务的Android AsyncTask

  3. 3

    带有嵌套asynctask的Android类

  4. 4

    Android AlarmManager无法唤醒电话(带有或不带有WakeLock)

  5. 5

    带有AsyncTask的Espresso

  6. 6

    android中带有AsyncTask的两个依赖的HttpUrlConnection

  7. 7

    Android:带有预览回调的Camera Asynctask

  8. 8

    带有上下文的AsyncTask的Android startActivityForResult

  9. 9

    带有AsyncTask的Android Fragment在Activity中提交后为null

  10. 10

    带有Asynctask的无尽RecyclerView

  11. 11

    Android Asynctask 和 runOnUiThread

  12. 12

    带有selection和selectionArgs []的Android CursorLoader

  13. 13

    带有Android和Google地图的TileOverlay

  14. 14

    带有PageTransformer和SceneTransition的Android ViewPager

  15. 15

    Android:带有RippleEffect和StateListAnimator的<include>

  16. 16

    带有截击和JSON的android

  17. 17

    带有selection和selectionArgs []的Android CursorLoader

  18. 18

    带有Android和Google地图的TileOverlay

  19. 19

    带有 Android SDK 的 AmazonSQSClientBuilder 和 AWSStaticCredentialsProvider

  20. 20

    带有nginx和.NET核心服务的Service Fabric

  21. 21

    与AlarmManager和WakeLocks有关的查询

  22. 22

    在Android中使用AlarmManager和BroadcastReceiver

  23. 23

    Android暂停服务,线程,Asynctask?使用带有延迟的处理程序吗?

  24. 24

    带有ArrayAdapter的Android AsyncTask给出错误“无法解析构造函数”

  25. 25

    Android Service与带有网络访问线程的简单类

  26. 26

    Android AsyncTask示例和说明

  27. 27

    Android Activity ASyncTask和onCancelled

  28. 28

    AsyncTask和JSON-Android

  29. 29

    Android AsyncTask和Mockito(或PowreMockito)

热门标签

归档