0

嗨,我将经度和纬度值存储在文本文件中并将它们保存在我的 sdcard 中。现在我想将此数据保存到 webserver(java) 文本文件。请告诉我如何在服务器中创建文本文件以及如何将数据发布到该文件.这是我的代码。

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

2 回答 2

1

如果您的 SD 卡上有文本文件,那么您可以使用以下上传方法将文件上传到您的服务器。

您将需要一个脚本,例如这个名为 uploader.php 的 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!";
    }

    ?>

然后在你的 java 中你可以有一个像这样的 Uploader 函数:确保填写正确的异常处理,并且你需要获取 HTTPClient 库。

      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) {
              }
          }
      }

像这样调用函数:

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

为了测试您的 PHP 脚本,您可以使用具有以下简单 HTML 表单的网页

  <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>
于 2012-10-14T12:55:07.430 回答
1

我认为您需要做的是创建一个服务器端应用程序(即 web 服务),它将接受来自客户端 Android 应用程序的数据并在服务器上创建文件。

您不直接从您的 android 应用程序访问服务器文件系统 - 您只需将信息发送到服务器应用程序来处理它。

网上有很多用于创建 Web 服务的教程。

于 2012-10-14T09:36:56.137 回答