srikanth
srikanth

Reputation: 55

How to post data from textfile to server textfile

Hi i am storing longitude and latitude values in textfile and saving them in my sdcard.now i want to save this data to webserver(java) textfile.please tell me how to create a textfile in server and also how to post data to that file.here is my code.

public class MainActivity extends Activity implements LocationListener{

private final static String STORETEXT="storetext.txt";


LocationManager locationManager ;
String provider;
String value1;
String value2;


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

    // Getting LocationManager object
    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);        

    // Creating an empty criteria object
    Criteria criteria = new Criteria();

    // Getting the name of the provider that meets the criteria
    provider = locationManager.getBestProvider(criteria, false);


    if(provider!=null && !provider.equals("")){

        // Get the location from the given provider 
        Location location = locationManager.getLastKnownLocation(provider);


        locationManager.requestLocationUpdates(provider, 20000, 1, this);


        if(location!=null)
            onLocationChanged(location);
        else
            Toast.makeText(getBaseContext(), "Location can't be retrieved", Toast.LENGTH_SHORT).show();

    }else{
        Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
    }
}

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

@Override
public void onLocationChanged(Location location) {
    // Getting reference to TextView tv_longitude
    TextView tvLongitude = (TextView)findViewById(R.id.tv_longitude);

    // Getting reference to TextView tv_latitude
    TextView tvLatitude = (TextView)findViewById(R.id.tv_latitude);

    // Setting Current Longitude
    tvLongitude.setText("Longitude:" + location.getLongitude());

    // Setting Current Latitude
    tvLatitude.setText("Latitude:" + location.getLatitude() );

    value1 = tvLongitude.getText().toString();
    value2 = tvLatitude.getText().toString();

    // saveClicked();

    SaveClicked2();




}

public void SaveClicked2() {

    try{

    File file = new File("/sdcard/Sree.txt");
    file.createNewFile();
    FileOutputStream fOut = new FileOutputStream(file);
     OutputStreamWriter out = new OutputStreamWriter(fOut);
     out.append(value1);
     out.append(value2);
     out.close();

     Toast.makeText(getBaseContext(),
                "Done writing values to textfile",
                Toast.LENGTH_SHORT).show();

    }
    catch(Exception e){

        Toast.makeText(getBaseContext(), e.getMessage(),
                Toast.LENGTH_SHORT).show();



    }







}

private void saveClicked() {



    try{
        OutputStreamWriter out=
                new OutputStreamWriter(openFileOutput(STORETEXT, 0));
        out.write(value1);
        out.write(value2);
        out.close();

        Toast
    .makeText(this, value1, Toast.LENGTH_LONG)
    .show();

    }
    catch(Throwable t){
        Toast.makeText(this, "Exception: "+ t.toString(), Toast.LENGTH_LONG)
        .show();

    }
}

@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      
}}

Upvotes: 0

Views: 1064

Answers (2)

Mark JW
Mark JW

Reputation: 496

If you have the textfile on the SD card, then you can use the following uploading approach to upload the file to your server.

You will need a script, such as this PHP script called uploader.php

    <?php

    $target_path = "H:/www/yourwebsitedirectory.com/"; 
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
    " has been uploaded";
    } else{
    echo "There was an error uploading the file, please try again!";
    }

    ?>

Then in your java you can have an Uploader function like this: Make sure to fill in your proper exception handling, and you will need to grab the HTTPClient libraries.

      public static void Uploader(File fname, String fpath) {
          try {
          DefaultHttpClient httpclient = new DefaultHttpClient();
          httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

          String postURL = "http://www.yourwebsite.com/uploader.php";
          HttpPost httppost = new HttpPost(postURL);

          // the boundary key below is arbitrary, it just needs to match the MPE so it can decode multipart correctly
          httppost.setHeader("Content-Type", "multipart/form-data; boundary=--32530126183148");
          MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "--32530126183148", Charset.forName("UTF-8"));
    try {
        mpEntity.addPart("uploadedfile",    new FileBody((fname), "application/txt"));
        mpEntity.addPart("MAX_FILE_SIZE",   new StringBody("100000"));

    } catch (Exception e1) {
    } 
          httppost.setEntity(mpEntity);
          HttpResponse response;
          try {
              response = httpclient.execute(httppost);
              HttpEntity resEntity = response.getEntity();
              if (resEntity != null) {
                  resEntity.consumeContent();
              }
          } catch (ClientProtocolException e) {
          } catch (Exception e) {
          }
          httpclient.getConnectionManager().shutdown();
          } catch (Throwable e) {
              try {
              } catch (Throwable e1) {
              }
          }
      }

Call the function like this:

    File tmpDir = new File(android.os.Environment.getExternalStorageDirectory(),"Directory of your file");
    File fname = new File(tmpDir, filesnameonSD);
    Uploader(fname);

And to test your PHP script, you can use a webpage with the following simple HTML form

  <form enctype="multipart/form-data" action="uploader.php" method="POST">
  <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
  Choose a file to upload: <input name="uploadedfile" type="file" /><br />
  <input type="submit" value="Upload File" />
  </form>

Upvotes: 1

Zyga
Zyga

Reputation: 2417

I think what you need to do is to create a server side application (ie. webservice) that will accept the data from your client Android application and create the files on the server.

You dont access the server file system directly from your android application - you just send the information to server application to handle that.

There is a lot of tutorials available online for creating webservices.

Upvotes: 1

Related Questions