简体   繁体   English

完成任务后,Android停止start_sticky服务

[英]Android stop start_sticky service after finishing the task

I am trying to create a service after the application is killed and wait for the mobile to connect to wifi after that finish the task and stop the service, it works fine when I send the task while the app is not killed but after I kill the app the service wont quit 我试图在应用程序被杀死后创建服务,并在完成任务并停止服务后等待移动设备连接到wifi,当我发送任务时应用程序未被杀死但在我将其杀死后,它可以正常工作应用程序服务不会退出

I've got three classes, the main class where I start the service 我有三节课,我开始服务的主要课

      public class MainActivity extends AppCompatActivity {

    //----------------------USER FIELDS -------------------->

    Spinner Category;
    EditText Description;
    EditText Address;
    EditText Date;
    EditText Time;
    EditText Name;
    EditText Email;
    EditText Phone;

    //-----------------------CONSTANTS---------------------->

    private static final int NUM_PAGES = 5;
    private static final int CAMERA_VALUE = 301;

    //----------------------IMAGE DIRECTORY----------------->

    String root;
    String imageFolderPath;
    String imageName;
    Uri fileUri;
    ArrayList<Uri> fileUris = new ArrayList<>();
    ArrayList<String> filepaths;
    ArrayList<String> photoPaths;
    List<String> Images = new ArrayList<>();

    //----------------------FRAGMENTS----------------------->

    SplashFragment splashFragment = new SplashFragment();
    DescFragment descFragment = new DescFragment();
    InfoFragment infoFragment = new InfoFragment();
    ChooserFragment chooserFragment = new ChooserFragment();
    SuccessFragment successFragment = new SuccessFragment();

    //-------------------DATABASE HANDLER------------------->

    DatabaseHandler db = new DatabaseHandler(this);

    //---------------------DIALOGS-------------------------->

    Dialog infoDialog;
    Dialog languageDialog;

    //-----------------SHARED PREFS------------------------->

    SharedPreferences prefs = null;

    //--------------IMAGEVIEW PREVIEWS---------------------->

    ArrayList<ImageView> img = new ArrayList<>();

    //-----------------COUNTERS----------------------------->

    private static int image_counter = 0;

    //----------VIEWPAGER AND VIEWPAGER ADAPTER------------->
    private ViewPager mPager;
    private PagerAdapter mPagerAdapter;


    TextInputLayout description_layout;
    TextInputLayout spinner_layout;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //-------------CHECK FOR PERMISSIONS---------------->

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
        {
            ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 0);
        }

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        findViewById(R.id.mainLayout).requestFocus();

        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);

        prefs = getSharedPreferences("co.milingona.socialactivist", MODE_PRIVATE);

        selectLanguge(prefs.getString("language","sq"), false);

        if(prefs.getBoolean("firstTimeRunning",true))
        {
            createShortcut();
            prefs.edit().putBoolean("firstTimeRunning",false).commit();
        }
    }
    @Override
    protected void onResume()
    {
        super.onResume();
    }

    private void restartActivity()
    {
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }
    private void selectLanguge(String language, boolean restart)
    {
        prefs.edit().putString("language", language).commit();

        String languageToLoad  = language; // your language
        Locale locale = new Locale(languageToLoad);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.setLocale(locale);
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());

        if( restart == true ) {
            restartActivity();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            super.onBackPressed();
        }
        else if(mPager.getCurrentItem() == 4)
        {
            restartActivity();
        } else {
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }


    public void splash_raporto(View view)
    {
        mPager.setCurrentItem(mPager.getCurrentItem() + 1);
    }

    public void desc_prev(View view)
    {

        if (view != null) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
        mPager.setCurrentItem(mPager.getCurrentItem() - 1);

    }
    public void desc_next(View view)
    {
        description_layout= (TextInputLayout) findViewById(R.id.description_layout);
        spinner_layout= (TextInputLayout) findViewById(R.id.spinner_layout);

        boolean continuePager = true;

        Category = (Spinner)findViewById(R.id.category);
        Description = (EditText)findViewById(R.id.description);

        if(Description.getText().toString().trim().length() == 0)
        {
            description_layout.setError(getText(R.string.description));
            continuePager=false;

        } else {

            description_layout.setErrorEnabled(false);
        }



        if(Category.getSelectedItem().toString().trim() == "Zgjidhni Kategorinë")
        {
            spinner_layout.setError(getText(R.string.category));
            continuePager=false;
        }

        if(continuePager == true)
        {
            mPager.setCurrentItem(mPager.getCurrentItem()+1);

            if (view != null) {
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }

    }

    public void info_prev(View view)
    {
        mPager.setCurrentItem(mPager.getCurrentItem()-1);
    }

    public void info_next(View view)
    {
        Address = (EditText)findViewById(R.id.address);
        this.Date = (EditText)findViewById(R.id.date);
        Time = (EditText)findViewById(R.id.time);
        Name = (EditText)findViewById(R.id.name);
        Email = (EditText)findViewById(R.id.email);
        Phone = (EditText)findViewById(R.id.phone);

        if(Email.getText().toString().trim().length()!=0)
        {
            if(isValidEmail(Email.getText().toString()))
            {
                mPager.setCurrentItem(mPager.getCurrentItem()+1);
            }
            else{
                Email.setBackground(getResources().getDrawable(R.drawable.border_bottom_red));
            }
        }
        else {
            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            Email.setBackground(getResources().getDrawable(R.drawable.border_bottom_white));
        }

        if (view != null) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

    public void choose_dergo(View view)
    {
        mPager.setCurrentItem(mPager.getCurrentItem()+1);

        for (Uri uri: fileUris) {
            Images.add(uri.toString());
        }

       db.addReport(new Report(Category.getSelectedItem().toString(),Description.getText().toString(),"Mitrovice", Address.getText().toString(),this.Date.getText().toString() + " " + Time.getText().toString(), Name.getText().toString(), Email.getText().toString(), Phone.getText().toString(), Images.toArray(new String[Images.size()])));

        if(CheckConnectivityService.running==false)
        {
            Intent stickyService=new Intent(this, CheckConnectivityService.class);
            startService(stickyService);
            CheckConnectivityService.running=true;
        }
    }

    public void camera_intent(View view)
    {
       if(image_counter<5)
       {
           root = Environment.getExternalStorageDirectory()
                   + "/SocialAcitivist";
           imageFolderPath = root + "/Images";
           File imagesFolder = new File(imageFolderPath);
           imagesFolder.mkdirs();
           Date d = new Date();
           CharSequence s = DateFormat.format("hh-mm-ss", d.getTime());
           imageName = "img-" + s + ".jpg";
           File image = new File(imageFolderPath, imageName);
           fileUri = Uri.fromFile(image);
           Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
           takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
           startActivityForResult(takePictureIntent, CAMERA_VALUE);
       }
        else{
           Toast.makeText(this,"First delete some pictures below",Toast.LENGTH_SHORT).show();
       }
    }

    public void gallery_intent(View view)
    {
        FilePickerBuilder.getInstance().setMaxCount(5-image_counter)
                .setSelectedFiles(filepaths)
                .setActivityTheme(R.style.AppTheme)
                .pickPhoto(this);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {

        if (requestCode == CAMERA_VALUE) {
            fileUris.add(fileUri);
            image_counter++;
        }

        if (requestCode == FilePickerConst.REQUEST_CODE_PHOTO && resultCode == RESULT_OK && data != null)
        {
            photoPaths = new ArrayList<>();
            photoPaths.addAll(data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_PHOTOS));

            for (String photopath : photoPaths)
            {
                fileUris.add(Uri.fromFile(new File(photopath)));
                image_counter++;
            }
        }

        img.add(0, (ImageView)findViewById(R.id.prev1));
        img.add(1, (ImageView)findViewById(R.id.prev2));
        img.add(2, (ImageView)findViewById(R.id.prev3));
        img.add(3, (ImageView)findViewById(R.id.prev4));
        img.add(4, (ImageView)findViewById(R.id.prev5));

        int img_counter=0;

        for(Uri uri:fileUris)
        {
            img.get(img_counter).setImageURI(uri);
            img_counter++;
        }
    }

    public void showTimePickerDialog(View v)
    {
        DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getSupportFragmentManager(), "timePicker");
    }

    public void showDatePickerDialog(View v)
    {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getSupportFragmentManager(), "datePicker");
    }
    public void OpenInformation(MenuItem item)
    {
        infoDialog=new Dialog(this,R.style.AppTheme_Dark);
        infoDialog.setContentView(R.layout.infromation_layout);
        infoDialog.show();
    }

    public void close_info_dialog(View view)
    {
        infoDialog.dismiss();
    }

    public void OpenLanguages(MenuItem item)
    {
        languageDialog=new Dialog(this, R.style.AppTheme_Dark_Dialog);
        languageDialog.setContentView(R.layout.language_layout);
        languageDialog.show();
    }

    public void ChangeLanguage(View view)
    {
        switch (view.getId())
        {
            case R.id.sq:
                if( prefs.getString("language","en").equalsIgnoreCase("en"))
                {
                    selectLanguge("sq", true);
                }
                break;
            case R.id.en:
                if( prefs.getString("language","sq").equalsIgnoreCase("sq"))
                {
                    selectLanguge("en", true);
                }
                break;
        }

        languageDialog.dismiss();
    }

    public void removeItem(View view)
    {
        int img_counter=0;

        try{
            switch (view.getId())
            {
                case R.id.prev1:

                    fileUris.remove(0);
                    for(Uri uri:fileUris)
                    {
                        img.get(img_counter).setImageURI(uri);
                        img_counter++;

                    }
                    img.get(img_counter).setImageURI(null);

                    break;
                case R.id.prev2:

                    fileUris.remove(1);
                    for(Uri uri:fileUris)
                    {
                        img.get(img_counter).setImageURI(uri);
                        img_counter++;

                    }
                    img.get(img_counter).setImageURI(null);

                    break;
                case R.id.prev3:

                    fileUris.remove(2);
                    for(Uri uri:fileUris)
                    {
                        img.get(img_counter).setImageURI(uri);
                        img_counter++;

                    }
                    img.get(img_counter).setImageURI(null);

                    break;
                case R.id.prev4:

                    fileUris.remove(3);
                    for(Uri uri:fileUris)
                    {
                        img.get(img_counter).setImageURI(uri);
                        img_counter++;

                    }
                    img.get(img_counter).setImageURI(null);

                    break;
                case R.id.prev5:

                    fileUris.remove(4);
                    for(Uri uri:fileUris)
                    {
                        img.get(img_counter).setImageURI(uri);
                        img_counter++;

                    }
                    img.get(img_counter).setImageURI(null);


                    break;
            }
            image_counter--;
        }
        catch(Exception e){}

    }

    public void openURL(View view) {
        String url;
        switch (view.getId())
        {
            case R.id.facebook: url="https://www.facebook.com";
                break;
            case R.id.twitter: url="https://www.twitter.com";
                break;
            case R.id.wordpress: url="https://www.facebook.com";
                break;
            default: url="https://www.facebook.com";
                break;
        }
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);
    }

    public static class TimePickerFragment extends DialogFragment
            implements TimePickerDialog.OnTimeSetListener
    {
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            final Calendar c = Calendar.getInstance();
            int hour = c.get(Calendar.HOUR_OF_DAY);
            int minute = c.get(Calendar.MINUTE);

            return new TimePickerDialog(getActivity(), R.style.AppTheme_Dark_Dialog, this, hour, minute,
                    DateFormat.is24HourFormat(getActivity()));
        }


        public void onTimeSet(TimePicker view, int hourOfDay, int minute)
        {
            EditText editTime=(EditText)getActivity().findViewById(R.id.time);
            editTime.setText(hourOfDay+":"+minute);
        }
    }

    public static class DatePickerFragment extends DialogFragment
            implements DatePickerDialog.OnDateSetListener
    {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState)
        {
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);
            DatePickerDialog dialog = new DatePickerDialog(getActivity(), R.style.AppTheme_Dark_Dialog, this, year, month, day);
            dialog.getDatePicker().setMaxDate(new Date().getTime());

            return dialog;
        }


        public void onDateSet(DatePicker view, int year, int month, int day)
        {
            EditText editDate=(EditText)getActivity().findViewById(R.id.date);
            editDate.setText(year+"-"+month+"-"+day);
        }
    }

    private boolean isValidEmail(String email)
    {
        String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
                + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter
    {

        public ScreenSlidePagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            switch (position)
            {
                case 0: return splashFragment;
                case 1: return descFragment;
                case 2: return infoFragment;
                case 3: return chooserFragment;
                case 4: return successFragment;
                default: return splashFragment;
            }
        }

        @Override
        public int getCount()
        {
            return NUM_PAGES;
        }
    }

    private void createShortcut()
    {
        final Intent shortcutIntent = new Intent(this, MainActivity.class);
        final Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher));
        intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        sendBroadcast(intent);
    }
}

then I got the service class 然后我得到了服务班

public final class CheckConnectivityService extends IntentService {
    Context context = this;
    NetworkConnectivityCheck networkConnectivityCheck = new NetworkConnectivityCheck();
    public Thread backgroundThread;
    public static boolean running = false;
    public static boolean stop = false;
    public static Intent _intent;
    public CheckConnectivityService() {
        super("S");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        _intent=intent;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        _intent=intent;
        networkConnectivityCheck.register(context);
        this.backgroundThread.start();
        running = false;
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        networkConnectivityCheck.unregister(context);
        backgroundThread.interrupt();
    }

    @Override
    public void onCreate() {
        this.backgroundThread = new Thread(myTask);

    }

    private Runnable myTask = new Runnable() {
        public void run() {
            while (running == true) {

                    if (stop == true) {
                        stop = false;
                        stopSelf();
                    }
                }
            }
        };
    }

and my third class where I check if internet is available if yes upload the form and make the service stop 我的第三堂课,如果可以的话,我检查互联网是否可用,然后上传表格并停止服务

public class NetworkConnectivityCheck {

    public boolean internetAvailable = false;
    private BroadcastReceiver networkChangeReceiver;
    List<Report> reports;

    NetworkConnectivityCheck(){
        this.networkChangeReceiver = new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context context, Intent intent) {
                int networkState = NetworkUtil.getConnectionStatus(context);
                DatabaseHandler db=new DatabaseHandler(context);
                if(networkState == NetworkUtil.NOT_CONNECTED){
                    internetAvailable = false;


                } else if(networkState == NetworkUtil.MOBILE){
                    internetAvailable = true;
                    //MainActivity.tvStatus.setText("ONLINE"); // you do something here.
                } else if(networkState == NetworkUtil.WIFI){

                    internetAvailable = true;

                        if(db.getReportsCount()!=0){
                            reports=db.getAllReports();
                            for(Report report : reports){
                                Upload upload=new Upload(report);
                                Thread doInBackground = new Thread(upload);
                                doInBackground.start();
                            }

                            db.deleteAll();
                            CheckConnectivityService.running=true;
                            CheckConnectivityService.stop=true;

                    }
                }
            }
        };
    }
    public void register(Context context)
    {
        context.registerReceiver(networkChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }
    public void unregister(Context context)
    {
        context.unregisterReceiver(networkChangeReceiver);
    }

    public class Upload implements Runnable
    {
        Report report;
        public Upload(Report _report)
        {
            report=_report;
        }
        @Override
        public void run() {
            try {
                MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");

                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(30, TimeUnit.SECONDS)
                        .writeTimeout(120, TimeUnit.SECONDS)
                        .readTimeout(20, TimeUnit.SECONDS)
                        .build();

                MultipartBody.Builder mRequestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);

                mRequestBody.addFormDataPart("category", report.getCategory());
                mRequestBody.addFormDataPart("description", report.getDescription());
                mRequestBody.addFormDataPart("city", report.getCity());
                mRequestBody.addFormDataPart("address", report.getAddress());
                mRequestBody.addFormDataPart("datetime", report.getDateTime());
                mRequestBody.addFormDataPart("name", report.getName());
                mRequestBody.addFormDataPart("email", report.getEmail());
                mRequestBody.addFormDataPart("phone", report.getPhone());

                if(report.getImages()[0].trim().length()!=0) {
                    ArrayList<Uri> fileUris = new ArrayList<>();
                    for (String uri : report.getImages())
                    {
                        fileUris.add(Uri.parse(uri));
                    }

                    for (Uri FileUri : fileUris)
                    {
                        File file = new File(FileUri.getPath());

                        RequestBody imageBody = RequestBody.create(MEDIA_TYPE_JPEG, file);
                        mRequestBody.addFormDataPart("images[]", FileUri.getLastPathSegment(), imageBody);
                    }
                }
                RequestBody requestBody = mRequestBody.build();

                Request request = new Request.Builder()
                        .addHeader("Content-Type","text/json; Charset=UTF-8")
                        .header("Authorization", "Basic bWlsaW5nb25hOlN0")
                        .url("http://LINK.com")
                        .post(requestBody)
                        .build();

                Response response = client.newCall(request).execute();


            } catch (Exception e)
            {
                e.printStackTrace();
            }

            Thread.currentThread().interrupt();

            return;
        }

    }
}

and here is the NetworkUtil class in case u want to understand it more 这是NetworkUtil类,以防您想进一步了解它

public class NetworkUtil
{
    public static final int NOT_CONNECTED = 0;
    public static final int WIFI = 1;
    public static final int MOBILE = 2;
    public static int getConnectionStatus(Context context)
    {
        ConnectivityManager connectivityManager =
                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

        if(networkInfo != null)
        {
            if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI)
            {
                return WIFI;
            }

            if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
            {
                return MOBILE;
            }
        }
        return NOT_CONNECTED;
    }
}

Somehow you can just register a BroadcastReceiver which shall get the intent for connectivity. 您可以通过某种方式注册一个BroadcastReceiver,它将获得连接的意图。 No need to implement such logic. 无需实现这种逻辑。

Use below filters in your app Receiver: 在应用接收器中使用以下过滤器:

<intent-filter>
    <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
    <action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>

Follow the post below: 按照下面的帖子:

BroadcastReceiver when wifi or 3g network state changed wifi或3g网络状态更改时的BroadcastReceiver

Hope it helps.. 希望能帮助到你..

You can use an intent service to upload your data, which will be invoked from a dedicated network change broadcast receiver and probably even on click of a submit button as well. 您可以使用意向服务上载您的数据,这将从专用的网络更改广播接收器中调用,甚至可能单击提交按钮也将调用它。

The service will look something like: 该服务将类似于:

public class UploadService extends IntentService {
    @Override
    protected void onHandleIntent(Intent workIntent) {
        int networkState = NetworkUtil.getConnectionStatus(context);
        DatabaseHandler db=new DatabaseHandler(context);
        if(networkState == NetworkUtil.NOT_CONNECTED){
            internetAvailable = false;
        } else if(networkState == NetworkUtil.MOBILE){
            internetAvailable = true;
            //MainActivity.tvStatus.setText("ONLINE"); // you do something here.
        } else if(networkState == NetworkUtil.WIFI){

            internetAvailable = true;

            if(db.getReportsCount()!=0){
                reports=db.getAllReports();
                for(Report report : reports){
                    Upload upload=new Upload(report);
                    Thread doInBackground = new Thread(upload);
                    doInBackground.start();
                }

                db.deleteAll();
            }
        }
    }

    public class Upload implements Runnable {
        Report report;
        public Upload(Report _report)
        {
            report=_report;
        }
        @Override
        public void run() {
            try {
                MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");

                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(30, TimeUnit.SECONDS)
                        .writeTimeout(120, TimeUnit.SECONDS)
                        .readTimeout(20, TimeUnit.SECONDS)
                        .build();

                MultipartBody.Builder mRequestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);

                mRequestBody.addFormDataPart("category", report.getCategory());
                mRequestBody.addFormDataPart("description", report.getDescription());
                mRequestBody.addFormDataPart("city", report.getCity());
                mRequestBody.addFormDataPart("address", report.getAddress());
                mRequestBody.addFormDataPart("datetime", report.getDateTime());
                mRequestBody.addFormDataPart("name", report.getName());
                mRequestBody.addFormDataPart("email", report.getEmail());
                mRequestBody.addFormDataPart("phone", report.getPhone());

                if(report.getImages()[0].trim().length()!=0) {
                    ArrayList<Uri> fileUris = new ArrayList<>();
                    for (String uri : report.getImages())
                    {
                        fileUris.add(Uri.parse(uri));
                    }

                    for (Uri FileUri : fileUris)
                    {
                        File file = new File(FileUri.getPath());

                        RequestBody imageBody = RequestBody.create(MEDIA_TYPE_JPEG, file);
                        mRequestBody.addFormDataPart("images[]", FileUri.getLastPathSegment(), imageBody);
                    }
                }
                RequestBody requestBody = mRequestBody.build();

                Request request = new Request.Builder()
                        .addHeader("Content-Type","text/json; Charset=UTF-8")
                        .header("Authorization", "Basic bWlsaW5nb25hOlN0")
                        .url("http://LINK.com")
                        .post(requestBody)
                        .build();

                Response response = client.newCall(request).execute();


            } catch (Exception e)
            {
                e.printStackTrace();
            }

            Thread.currentThread().interrupt();

            return;
        }

    }
}

You can refer this official document here: Creating a background service 您可以在此处参考此官方文档: 创建后台服务

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM