Сохранить данные из файла XML, когда Интернет доступен в Android Studio

Я делаю app в android studio в котором я получаю данные из JSON files и заполнить его в счетчик. Ниже мое изображение приложения

введите описание изображения здесь

У меня есть два варианта сохранения данных при следующих условиях.

  1. Когда интернет отключен, данные будут сохранены в локальном xml файл.
  2. Когда интернет в приложении will проверьте наличие соединения и, если оно доступно, он проверит файл и затем загрузит его на сервер.

На данный момент я могу реализовать обе точки по отдельности, т.е. я создал метод, который будет проверять подключение к Интернету. Передал этот метод в условие и, если соединение доступно, он сохранит данные в локальный файл xml файл и, если Интернет не доступен, то он будет сохранять новые данные только на сервер.

Мой скрипт ниже

require_once ('config.php');

$return_arr = array();

$ref_no = ($_POST['ref_no']);
$meter_type = ($_POST['meter_type']);
$lattitude = ($_POST['lattitude']);
$longitude = ($_POST['longitude']);
$site_status = ($_POST['site_status']);
$comm_status = ($_POST['comm_status']);
$pole_type = ($_POST['pole_type']);
$meter_placement = ($_POST['meter_placement']);
$date_time = ($_POST['datetime']);



$record_save = "INSERT INTO `survey`(`s_id`,`ref_no`,`meter_type`, `lattitude`,`longitude`,`site_status`,`comm_status`,`pole_type`,`meter_placement`, `datetime`) values (NULL,'".$ref_no."','".$meter_type."','".$lattitude."','".$longitude."','".$site_status."','".$comm_status."','".$pole_type."','".$meter_placement."','".$date_time."')";
mysqli_query ($con,$record_save);
$row_array['errorcode1'] = 1;

Я сохраняю все данные в строковом формате, как показано ниже

String DateTime,refr_no, meter_type, Latitude, Longitude, site_status, comm_status, pole_type,rb_text;

На нажатие кнопки я спрашиваю permission для сохранения файла в локальном хранилище, а затем на permission granted я разместил чеки, как показано ниже

btn_save_data.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(refr_no == "Select a reference number" || meter_type == "Select Meter Type" || Latitude == " " || Longitude == ""
                    || site_status == "Select Site Status" || comm_status == "" || pole_type == "Select pole type" || DateTime == "" )
            {
                Toast.makeText(MainActivity.this, " Data not saved.... you must be missing some thing.. Please check!!! " , Toast.LENGTH_LONG ).show();

            }else {

                new TedPermission(MainActivity.this)
                        .setPermissionListener(ListenerSaveData)
                        .setRationaleMessage("This activity will need your permission to save file ")
                        .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        .check();

                Toast.makeText(MainActivity.this,"Data saved successfully", Toast.LENGTH_SHORT).show();

              }

        }
    });

 final PermissionListener ListenerSaveData = new PermissionListener() {
              @Override
              public void onPermissionGranted() {
                  if(refr_no == "Select a reference number" || meter_type == "Select Meter Type" || Latitude == " " || Longitude == ""
                          || site_status == "Select Site Status" || comm_status == "" || pole_type == "Select pole type" || DateTime == "" )
                  {
                      Toast.makeText(MainActivity.this, " Data not saved.... you must be missing some thing.. Please check!!! " , Toast.LENGTH_LONG ).show();

                  }else {

                      if (!isOnline()) {
                          try {
                              File file = new File(getApplicationContext().getExternalFilesDir(null), filename);
                              file.createNewFile();
                              FileOutputStream fileos = new FileOutputStream(file, true);
                              XmlSerializer xmlSerializer = Xml.newSerializer();
                              StringWriter writer = new StringWriter();
                              xmlSerializer.setOutput(writer);
                              xmlSerializer.startDocument("UTF-8", true);
                              xmlSerializer.startTag(null, "record");
                              xmlSerializer.startTag(null, "ref_no");
                              xmlSerializer.text(refr_no);
                              xmlSerializer.endTag(null, "ref_no");
                              xmlSerializer.startTag(null, "meter_type");
                              xmlSerializer.text(meter_type);
                              xmlSerializer.endTag(null, "meter_type");
                              xmlSerializer.startTag(null, "lat");
                              xmlSerializer.text(Latitude);
                              xmlSerializer.endTag(null, "lat");
                              xmlSerializer.startTag(null, "long");
                              xmlSerializer.text(Longitude);
                              xmlSerializer.endTag(null, "long");
                              xmlSerializer.startTag(null, "site_status");
                              xmlSerializer.text(site_status);
                              xmlSerializer.endTag(null, "site_status");
                              xmlSerializer.startTag(null, "communication_status");
                              xmlSerializer.text(comm_status);
                              xmlSerializer.endTag(null, "communication_status");
                              xmlSerializer.startTag(null, "pole_type");
                              xmlSerializer.text(pole_type);
                              xmlSerializer.endTag(null, "pole_type");
                              xmlSerializer.startTag(null, "meter_placement");
                              xmlSerializer.text(rb_text);
                              xmlSerializer.endTag(null, "meter_placement");
                              xmlSerializer.startTag(null, "date_time");
                              xmlSerializer.text(DateTime);
                              xmlSerializer.endTag(null, "date_time");
                              xmlSerializer.endTag(null, "record");
                              xmlSerializer.endDocument();
                              xmlSerializer.flush();
                              String dataWrite = writer.toString();
                              fileos.write(dataWrite.getBytes());
                              fileos.close();
                          } catch (FileNotFoundException e) {
                              // TODO Auto-generated catch block
                              e.printStackTrace();
                          } catch (IllegalArgumentException e) {
                              // TODO Auto-generated catch block
                              e.printStackTrace();
                          } catch (IllegalStateException e) {
                              // TODO Auto-generated catch block
                              e.printStackTrace();
                          } catch (IOException e) {
                              // TODO Auto-generated catch block
                              e.printStackTrace();
                          }
                          dd_ref.setSelection(0);
                          dd_pole_type.setSelection(0);
                          dd_site_status.setSelection(0);
                          dd_m_type.setSelection(0);

                          _latitude.setText("");
                          _longitude.setText("");
                          comment.setText("");
                          DateTime = "";
                          refr_no = "";
                          Latitude = "";
                          Longitude = "";
                          site_status = "";
                          comm_status = "";
                          pole_type = "";
                          rb_text = "";
                          rg_meter_placement.clearCheck();
                      }else if (isOnline())
                      {
                          new SaveData().execute(refr_no,meter_type,Latitude,Longitude,site_status,comm_status,pole_type,rb_text,DateTime);
                      }
                  }
              }

              @Override
              public void onPermissionDenied(ArrayList<String> deniedPermissions) {

              }
          };

Здесь isOnline Метод проверки подключения к Интернету, как показано ниже

protected boolean isOnline() {

    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if(netInfo != null && netInfo.isConnectedOrConnecting())
    {
        Toast.makeText(MainActivity.this, "Internet is Connected", Toast.LENGTH_SHORT).show();
        return true;
    }
    else {
        Toast.makeText(MainActivity.this, "Internet is NOT Connected", Toast.LENGTH_SHORT).show();
        return false;
    }
}

За SaveData() метод код ниже

private class SaveData extends AsyncTask<String, Void, String>{

    ProgressDialog mProgressDialog;
    String res;

    @Override
    protected void onPreExecute() {
        mProgressDialog = ProgressDialog.show(MainActivity.this,
                "", "Saving Data Please wait...");
        mProgressDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {

        res = null;
        PutUtility put = new PutUtility();

        put.setParam("ref_no",params[0].toString());
        put.setParam("meter_type", params[1].toString());
        put.setParam("lattitude", params[2].toString());
        put.setParam("longitude", params[3].toString());
        put.setParam("site_status",params[4].toString());
        put.setParam("comm_status",params[5].toString());
        put.setParam("pole_type",params[6].toString());
        put.setParam("meter_placement",params[7].toString());
        put.setParam("datetime",params[8].toString());


        try {
            res = put.postData("http://192.168.100.12:8000/new/post_data.php");
            Log.v("res", res);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    protected void onPostExecute(String res) {

        if(refr_no == "Select a reference number" || meter_type == "Select Meter Type" || Latitude == " " || Longitude == ""
                || site_status == "Select Site Status" || comm_status == "" || pole_type == "Select pole type" || DateTime == "" )
        {
            Toast.makeText(MainActivity.this, " Data not saved.... you must be missing some thing.. Please check!!! " , Toast.LENGTH_LONG ).show();

        }else {
            Toast.makeText(getApplicationContext(), " Data Saved Successfully ", Toast.LENGTH_SHORT).show();

            dd_ref.setSelection(0);
            dd_pole_type.setSelection(0);
            dd_site_status.setSelection(0);
            dd_m_type.setSelection(0);

            _latitude.setText("");
            _longitude.setText("");
            comment.setText("");
            DateTime = "";
            refr_no = "";
            Latitude = "";
            Longitude = "";
            site_status = "";
            comm_status = "";
            pole_type = "";
            rb_text = "";
            rg_meter_placement.clearCheck();
        }
        mProgressDialog.dismiss();

        Intent intent = getIntent();
        finish();
        startActivity(intent);


    }

}

В то время как PutUtility класс ниже

public class PutUtility {

private Map<String, String> params = new HashMap<>();
private static HttpURLConnection httpConnection;
private static BufferedReader reader;
private StringBuffer response;


public void setParam(String key, String value) {
    params.put(key, value);
}

public String postData(String Url) {

    StringBuilder sb = new StringBuilder();
    for (String key : params.keySet()) {
        String value = null;
        value = params.get(key);


        if (sb.length() > 0) {
            sb.append("&");
        }
        sb.append(key + "=" + value);
    }

    try {
        // Defined URL  where to send data

        URL url = new URL(Url);

        URLConnection conn = null;
        conn = url.openConnection();

        // Send POST data request
        httpConnection = (HttpURLConnection) conn;
        httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        httpConnection.setRequestMethod("POST");
        httpConnection.setDoInput(true);
        httpConnection.setDoOutput(true);
        OutputStreamWriter wr = null;

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

        BufferedReader in = new BufferedReader(
                new InputStreamReader(httpConnection.getInputStream()));
        String inputLine;
        response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    return response.toString();
}}

Я хочу реализовать второй пункт, что всякий раз, когда app После этого все данные в файле (XML-файл) будут загружены на сервер.

Как новичок, я понятия не имею, как это сделать.

Любая помощь будет высоко оценен.

0 ответов

Другие вопросы по тегам