使用Android服务将xml文件上载到服务器

使用Android服务将xml文件上载到服务器,android,service,Android,Service,我正在用android开发一个应用程序,我称之为一个服务,它会在点击按钮时将xml文件上传到服务器。问题是当我第一次点击按钮时,它会被上传,但当我第二次点击按钮时,它会被上传…所以请告诉我是否有任何解决方案..请帮助我 下面是扩展服务的代码 import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.InputStreamReader; import java.net.URL; impor

我正在用android开发一个应用程序,我称之为一个服务,它会在点击按钮时将xml文件上传到服务器。问题是当我第一次点击按钮时,它会被上传,但当我第二次点击按钮时,它会被上传…所以请告诉我是否有任何解决方案..请帮助我

下面是扩展服务的代码

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Service;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.IBinder;
import android.util.Base64;
import android.util.Log;
import android.widget.Toast;

public class Uploader extends Service
{
    String info;
    String phot_loc;
    int category;
    String phonenumber = null,profile_name=null,email_id=null;
    double longi;
    double latti;
    Runnable runner;


    //UIhandler to display the status of upload on response from server
    Handler uiHandler = new Handler();

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

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
        if(intent!=null)
        {
            info=intent.getStringExtra("info");
            phot_loc=intent.getStringExtra("photo_loc");
            category=intent.getIntExtra("category",0);
            phonenumber=intent.getStringExtra("phone_number");
            profile_name=intent.getStringExtra("profile_name");
            email_id=intent.getStringExtra("email_id");
            longi=intent.getDoubleExtra("longitude",0);
            latti=intent.getDoubleExtra("latitude",0);
            phonenumber=intent.getStringExtra("phone_number");
            Log.d("UploadService","Indide upload Activity");

            Thread t=new Thread(runner);
            t.start();
        }

        //this will perform the uploading process
        runner=new Runnable(){

            @Override
            public void run() {
                // TODO Auto-generated method stub
            try
            {

                Log.d("UploadService","Indide upload Activity RIUNNER");


                String xml = createXml();

                RestClient client = new RestClient("http://3pixelart.com/complaint_process.php",xml);
                //Log.d("UploadService", xml);

                try {
                      client.Execute();
                      MyRunnable r = new MyRunnable("Complaint Uploaded Successfully");
                        uiHandler.post(r);
                }
                catch(Exception e)
                {
                    Log.e("UploadService", "Exception in uploading :"+e.getMessage());
                    MyRunnable r = new MyRunnable("There was an error while registering complaint. Pls try again "+ e.getMessage());
                    uiHandler.post(r);

                }

            }
            catch(Exception e)
            {
                Log.e("UploadService", "Exception:"+e.getMessage());
                MyRunnable r=new MyRunnable("Error in uploading the complaint..");
                uiHandler.post(r);
            }

            }



        };




    }

    public String createXml() {


         Log.d("UploadService","Indide upload Activity  create xml 1");


             Log.d("UploadService","Indide upload Activity  create xml 2");

            Date d = new Date();

            //SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm a");

            //String time = formatter.format(d);

             Log.d("UploadService","Indide upload Activity  create xml 3");
            String imageData = getBase64ImageData();

            SimpleDateFormat fileNameFormatter = new SimpleDateFormat("ddMMyyHHmm");

             Log.d("UploadService","Indide upload Activity  create xml 5");

            String filename = "image"+fileNameFormatter.format(d)+".png";


            String finaldata="<?xml version=\"1.0\"?>";
            finaldata+="<ClientRequest><MobileNumber>"+phonenumber+"</MobileNumber><Longitude>";
            finaldata+=longi+"</Longitude><Lattitude>"+latti+"</Lattitude>";
            finaldata+="<Category>"+category+"</Category>";
            finaldata+="<Profilename>"+profile_name+"</Profilename><Email>"+email_id+"</Email>";
            finaldata+="<FileName>"+filename+"</FileName><Image>"+imageData+"</Image><Info>";
            finaldata+=info+"</Info></ClientRequest>";

            Log.d("UploadService","The DATA IS :  "+finaldata);
            return finaldata;

        }


    private String getBase64ImageData() {
        // TODO Auto-generated method stub

    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 8; 
            Bitmap bitmapOrg = BitmapFactory.decodeFile(phot_loc,options);
            ByteArrayOutputStream bao = new ByteArrayOutputStream();
            bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
            byte [] ba = bao.toByteArray();

            String encodedImage = Base64.encodeToString(ba, Base64.DEFAULT);
            //Log.d("UploadService", encodedImage);
            bitmapOrg=null;
            System.gc();
        return encodedImage;
    }


    //this is used to display the status of uploading for this u require UIHandler
    public class MyRunnable implements Runnable{
        private String message=null;

        public MyRunnable(String message) {
            // TODO Auto-generated constructor stub
            this.message=message;
        }
        public void run() {
            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
        }
    };




}
导入java.io.BufferedReader;
导入java.io.ByteArrayOutputStream;
导入java.io.InputStreamReader;
导入java.net.URL;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入android.app.Service;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.Handler;
导入android.os.IBinder;
导入android.util.Base64;
导入android.util.Log;
导入android.widget.Toast;
公共类上载程序扩展服务
{
字符串信息;
字符串phot_loc;
int类;
字符串phonenumber=null,profile\u name=null,email\u id=null;
双纵;
双格子;
跑者;
//UIhandler显示服务器响应时上载的状态
Handler uiHandler=newhandler();
@凌驾
公共IBinder onBind(意图arg0){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共无效启动(Intent Intent,int startId){
//TODO自动生成的方法存根
super.onStart(intent,startId);
if(intent!=null)
{
info=intent.getStringExtra(“info”);
phot_loc=intent.getStringExtra(“照片_loc”);
category=intent.getIntExtra(“category”,0);
phonenumber=intent.getStringExtra(“电话号码”);
profile_name=intent.getStringExtra(“profile_name”);
email_id=intent.getStringExtra(“email_id”);
longi=intent.getDoubleExtra(“经度”,0);
latti=intent.getDoubleExtra(“纬度”,0);
phonenumber=intent.getStringExtra(“电话号码”);
Log.d(“上传服务”、“独立上传活动”);
螺纹t=新螺纹(流道);
t、 start();
}
//这将执行上载过程
runner=新的Runnable(){
@凌驾
公开募捐{
//TODO自动生成的方法存根
尝试
{
Log.d(“UploadService”、“Indide upload Activity RIUNNER”);
字符串xml=createXml();
RestClient=新的RestClient(“http://3pixelart.com/complaint_process.php“,xml);
//Log.d(“上传服务”,xml);
试一试{
client.Execute();
MyRunnable r=新建MyRunnable(“投诉上传成功”);
uiHandler.post(r);
}
捕获(例外e)
{
Log.e(“UploadService”,“上传异常:+e.getMessage());
MyRunnable r=new MyRunnable(“注册投诉时出错,请重试”+e.getMessage());
uiHandler.post(r);
}
}
捕获(例外e)
{
Log.e(“UploadService”,“异常:+e.getMessage());
MyRunnable r=新建MyRunnable(“上传投诉时出错”);
uiHandler.post(r);
}
}
};
}
公共字符串createXml(){
d(“UploadService”,“Indide上传活动创建xml 1”);
d(“UploadService”,“Indide上传活动创建xml 2”);
日期d=新日期();
//SimpleDataFormat格式化程序=新的SimpleDataFormat(“dd/MM/yyyy HH:MM a”);
//字符串时间=格式化程序。格式(d);
d(“UploadService”,“Indide上传活动创建xml 3”);
字符串imageData=getBase64ImageData();
SimpleDataFormat fileNameFormatter=新的SimpleDataFormat(“ddMMyyHHmm”);
d(“UploadService”,“Indide上传活动创建xml 5”);
String filename=“image”+fileNameFormatter.format(d)+“.png”;
字符串finaldata=“”;
最终数据+=“”+电话号码+“”;
finaldata+=longi+“”+latti+“”;
最终数据+=“”+类别+“”;
finaldata+=“”+个人资料名称+“”+电子邮件id+“”;
finaldata+=“”+文件名+“”+图像数据+“”;
最终数据+=信息+“”;
Log.d(“UploadService”,“数据为:“+finaldata”);
返回最终数据;
}
私有字符串getBase64ImageData(){
//TODO自动生成的方法存根
BitmapFactory.Options=new-BitmapFactory.Options();
options.inSampleSize=8;
位图bitmapOrg=BitmapFactory.decodeFile(phot_loc,选项);
ByteArrayOutputStream bao=新建ByteArrayOutputStream();
压缩(Bitmap.CompressFormat.JPEG,90,bao);
字节[]ba=bao.toByteArray();
字符串encodedImage=Base64.encodeToString(ba,Base64.DEFAULT);
//Log.d(“上传服务”,encodedImage);
bitmapOrg=null;
gc();
返回图像;
}
//用于显示此u-require UIHandler的上载状态
公共类MyRunnable实现Runnable{
私有字符串消息=null;
公共MyRunnable(字符串消息){
//TODO自动生成的构造函数存根
this.message=消息;
}
公开募捐{
Toast.makeText(getApplicationContext(),message,Toast.LENGTH_LONG.show();
}
};
}
这是我的活动,它是我的服务

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class ComplaintActivity extends Activity implements OnClickListener
{

    boolean pic_taken=false;
    Button bpicture,bregister;
    EditText description;
    ImageView iv1;
    int category=0;
    private static final int TAKE_PICTURE = 1;
    String Provider_name="";
    Location currentLocation;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_complaint);

        bpicture=(Button) findViewById(R.id.button1);
        bregister=(Button) findViewById(R.id.button2);
        iv1=(ImageView) findViewById(R.id.taken_pic);
        description=(EditText)findViewById(R.id.editText1);

        bpicture.setOnClickListener(ComplaintActivity.this);
        bregister.setOnClickListener(ComplaintActivity.this);

        LocationManager manager=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        List <String> l1=manager.getProviders(true);
        if(l1.contains(LocationManager.GPS_PROVIDER))
        {
            Provider_name=LocationManager.GPS_PROVIDER;

        }
        if(l1.contains(LocationManager.NETWORK_PROVIDER))
        {
            Provider_name=LocationManager.NETWORK_PROVIDER;
        }

        currentLocation=manager.getLastKnownLocation(Provider_name);
        Toast.makeText(ComplaintActivity.this, "GPS PROVIDERS "+Provider_name+"Lattti:"+currentLocation.getLatitude()+"Long:"+currentLocation.getLongitude(), Toast.LENGTH_LONG).show();
        LocationListener listener=new MyLocationListener();
        manager.requestLocationUpdates(Provider_name, 0, 0, listener);




    }

    class MyLocationListener implements LocationListener
    {

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            currentLocation=location;

        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        if(arg0==bpicture)
            take_picture();
        if(arg0==bregister)
            register_complaint();

    }


    private void take_picture() {
        // TODO Auto-generated method stub
        Intent int_cam=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        Uri Outputfile=Uri.parse("file:///sdcard/temppic.jpg");
        int_cam.putExtra(MediaStore.EXTRA_OUTPUT,Outputfile);
        startActivityForResult(int_cam,TAKE_PICTURE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        //Log.d("BAKRA","INSIDE CAMEra Activity>>>>>>>>>>>");
        if(requestCode==1)
        {
            //Log.d("BAKRA","INSIDE FIRST IF  >>>>>>>>>>>");
            if(resultCode==RESULT_OK)
            {
            //  Log.d("BAKRA","INSIDE SECONG IF  >>>>>>>>>>>");
                if(data==null)
                {
                //  Log.d("BAKRA","INSIDE THIRD IF  >>>>>>>>>>>");
                    pic_taken=true;
                    BitmapFactory.Options opt=new BitmapFactory.Options();
                    opt.inSampleSize=8;
                    Bitmap bitorg=BitmapFactory.decodeFile("sdcard/temppic.jpg", opt);
                //  Log.d("BAKRA","INSIDE CAME>>>>>>>>>>>");
                    iv1.setImageBitmap(bitorg);

                }
            }

        }
    }

    private void register_complaint() {
        // TODO Auto-generated method stub

        if(!pic_taken)
        {
            Toast.makeText(ComplaintActivity.this, "Please Take the Picture Related to the Query", Toast.LENGTH_LONG).show();
            return;
        }
        if(description.getText().toString().equals(""))
        {
            Toast.makeText(ComplaintActivity.this, "Please Enter Details About the Complaint",Toast.LENGTH_LONG).show();
            return;
        }
        else
        {
            Intent up=new Intent(ComplaintActivity.this,Uploader.class);
            up.putExtra("category",getIntent().getIntExtra("Selected",1));
            up.putExtra("info", description.getText().toString());
            up.putExtra("photo_loc", "/sdcard/temppic.jpg");
            up.putExtra("latitude", currentLocation.getLatitude());
            up.putExtra("longitude", currentLocation.getLongitude());

            SQLiteDatabase db=openOrCreateDatabase("LBA", MODE_PRIVATE, null);
            Cursor c=db.rawQuery("select * from users", null);
            String phonenumber = null,profile_name=null,email_id=null;
            if(c.moveToFirst())
            {

                profile_name=c.getString(c.getColumnIndex("profilename"));
                email_id=c.getString(c.getColumnIndex("emailid"));
                phonenumber=c.getString(c.getColumnIndex("phonenumber"));
            }
            up.putExtra("phone_number", phonenumber);
            up.putExtra("profile_name", profile_name);
            up.putExtra("email_id", email_id);
            startService(up);
            Toast.makeText(ComplaintActivity.this, "Uploading to Server...",Toast.LENGTH_LONG).show();
            finish();
        }

    }





}
import java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.graphics.Bitmap;
导入android.gra
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);