0

我正在使用下面给出的服务代码将数据从文本文件发送到服务器。它逐行向服务器发送数据。我希望服务在后台连续运行。为此,我编写了 asyncTask。但它会发送一次所有数据然后停止。

public class BackgroundService extends Service
    {
        private static final String TAG = "BackgroundService";
        String line=null;
        Context mContext = null;
        File file;RandomAccessFile in = null;
        StringEntity se ;
        HttpEntity entity=null;
        final static int SERVICE_NAME = 1;
        int WORK_TYPE;
    public BackgroundService()
    {
        //super(TAG);
    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(),"in BackgroundService",       Toast.LENGTH_LONG).show();
         mContext = getBaseContext();
         WORK_TYPE = 2;
         new BackgroundTask(mContext).execute();
         return super.onStartCommand(intent, flags, startId);
    }

    public class BackgroundTask extends AsyncTask<String, String, Void>
    {

        Context mContext = null;String response;

       public BackgroundTask(Context context)
    {
        mContext = context;
    }

    protected void onPreExecute()
    {
        Toast.makeText(getApplicationContext(),"1", Toast.LENGTH_LONG).show();
    }

    protected Void doInBackground(final String... args)
    {
        switch (WORK_TYPE)
        {
            case 2:
                 File file = new File(Environment.getExternalStorageDirectory(),"/BPCLTracker/gpsdata.txt");
                  int i=0;

                  RandomAccessFile in = null;
            try {
                in = new RandomAccessFile(file, "rw");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                while ((line = in.readLine()) != null)
                  {
                     String input = line.toString();
                     response = sendDataToServer(input);
                     // JsonUtils.parseServerData(response, hashMapObj);
                  }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                break;
        }//switch
        return null;
    }//doInBackground

    protected void onPostExecute(final Void unused)
    {
        Toast.makeText(getApplicationContext(),"3", Toast.LENGTH_LONG).show();
        switch (WORK_TYPE)
        {
            case 2:
                if (!"".equalsIgnoreCase(response) && response != null)
                {
                    //DeviceUtils.deviceRegistration(hashMapObj, mContext);   
                    callService(1);
                }
            try {
                if((line = in.readLine()) == null && entity!=null)
                {
                    file.delete();
                    new BackgroundTask(mContext).execute();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                break;
        }
    }
}

public void callService(int work)
{
    WORK_TYPE = work;
    new BackgroundTask(mContext).execute();
}


public String sendDataToServer(String data)
{
    StringBuffer sb = new StringBuffer("");
    String serverUrl = "http://67.23.166.35:80/android/insert.php" ;
    try
    {
        URL url = new URL(serverUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setConnectTimeout(6 * 10 * 1000);
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        conn.setRequestMethod("POST");

        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String line = "";
        while ((line = rd.readLine()) != null)
        {
            // Process line...
            sb.append(line);
        }

        wr.close();
        rd.close();
        return sb.toString();
    }
    catch (Exception e)
    {
        Log.d("Exception : ", e.getStackTrace().toString());
    }

    return sb.toString();
}
}

谢谢

4

1 回答 1

0

我有修改你的代码:

检查我的所有代码,这将让您了解有关发送行的信息。请以这种方式完成其余的逻辑。我也删除了一些方法。

这不是所有的代码,但它会给你 IDEA。

package com.example.getjson;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.http.HttpEntity;
import org.apache.http.entity.StringEntity;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class backservice extends Service {

    private static final String TAG = "BackgroundService";
    String line = null;
    Context mContext = null;
    File file;
    RandomAccessFile in = null;
    StringEntity se;
    HttpEntity entity = null;
    final static int SERVICE_NAME = 1;
    int WORK_TYPE;
    String response;
    String input = "";

    public backservice() {
        // super(TAG);
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "in BackgroundService",
                Toast.LENGTH_LONG).show();
        mContext = getBaseContext();
        WORK_TYPE = 2;
        // new BackgroundTask(mContext).execute();
        switch (WORK_TYPE) {
        case 2:
            File file = new File(Environment.getExternalStorageDirectory(),
                    "/BPCLTracker/gpsdata.txt");
            int i = 0;

            RandomAccessFile in = null;
            try {
                in = new RandomAccessFile(file, "rw");
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                while ((line = in.readLine()) != null) {
                    input = line.toString();
                    // response = sendDataToServer(input);
                    new BackgroundTask(mContext).execute();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
        return super.onStartCommand(intent, flags, startId);
    }

    public class BackgroundTask extends AsyncTask<String, String, Void> {

        Context mContext = null;

        public BackgroundTask(Context context) {
            mContext = context;
        }

        protected void onPreExecute() {
            Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_LONG)
                    .show();
        }

        protected Void doInBackground(final String... args) {
            response = sendDataToServer(input);
            return null;
        }

        protected void onPostExecute(final Void unused) {

        }
    }

    public void callService(int work) {
        WORK_TYPE = work;
        new BackgroundTask(mContext).execute();
    }

    public String sendDataToServer(String data) {
        StringBuffer sb = new StringBuffer("");
        String serverUrl = "http://67.23.166.35:80/android/insert.php";
        try {
            URL url = new URL(serverUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setConnectTimeout(6 * 10 * 1000);
            conn.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded;charset=UTF-8");
            conn.setRequestMethod("POST");

            OutputStreamWriter wr = new OutputStreamWriter(
                    conn.getOutputStream());
            wr.write(data);
            wr.flush();

            // Get the response
            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));

            String line = "";
            while ((line = rd.readLine()) != null) {
                // Process line...
                sb.append(line);
            }

            wr.close();
            rd.close();
            return sb.toString();
        } catch (Exception e) {
            Log.d("Exception : ", e.getStackTrace().toString());
        }

        return sb.toString();
    }
}
于 2013-03-21T11:20:43.887 回答