我使用下面给出的服务代码将数据从文本文件发送到服务器。它逐行向服务器发送数据。我希望服务能够在后台持续运行。为此,我编写了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();
}
}
谢谢
答案 0 :(得分: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();
}
}