2012-10-14 104 views
0

你好我在文本文件存储经度和纬度值,并将其保存在我的sdcard.now我想这个数据保存到网络服务器(JAVA)textfile.please告诉我如何创建服务器中的textfile以及如何将数据发布到该文件。这里是我的代码。如何从文本文件上传数据到服务器的文本文件

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  
}} 
+0

对不起,我不要我不明白你的问题。通常,客户端应用程序将文件发送到在服务器上运行的程序,该程序保存该文件。客户端应用程序将信号发送到服务器上的应用程序,并进行保存/编辑。我不确定它可以做任何不同的事情。我可能是错的 – baash05

+0

请告诉我如何创建一个接受我的数据,来自客户端文本文件 – srikanth

回答

1

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

您将需要一个脚本,比如这个叫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!"; 
    } 

    ?> 

然后在你的java你可以有一个上传功能,像这样的PHP脚本: 请务必填写您的适当的异常处理,你需要抓取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> 
1

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

你不直接从Android应用程序访问服务器上的文件系统 - 你只是将信息发送到服务器应用程序来处理。

有可用的很多教程在线创建web服务。

+0

请给我一个样本示例或样本的链接,可以让我的数据以文本文件存储。 – srikanth

+0

这是最简单的部分,可以使用java File class来完成 - 您可以通过它来获取数百个示例。你可能应该担心的是首先创建服务器端应用程序或web服务来接受来自android应用程序的数据。然后你可以将这些数据保存在服务器上。 – Zyga

相关问题