我需要向 PHP 服务器发送一个文件和一些数据。我为此使用一个线程和一个每 15 分钟执行一次的服务。当网络可用时它工作正常。但是当不在网络中时它停止发送文件(如果文件的大小相对较大)。在应用日志后,我看到,没有获取来自服务器的响应。它得到了 struk。此外,它在第一次尝试发送文件时发送 Unknownhost 异常。什么可以是问题吗?请帮忙。
这是代码: -
public void run(){
while (keepRunning){
isRunning = true;
SystemClock.sleep(900000);
File tempFile = new File(Environment.getExternalStorageDirectory() + "/Android/data/com.wherephone.helloandroid/log_files/", "barcode_log");
File tempFile1 = new File(Environment.getExternalStorageDirectory() + "/Android/data/com.wherephone.helloandroid/log_files/", "data_log.txt");
if(tempFile.exists())
{
Log.d(TAG," in keep running");
String[] files = (new File(Environment.getExternalStorageDirectory() + PATH)).list();
Log.d(TAG," below file list");
SimpleDateFormat df3 = new SimpleDateFormat("yyyyMMdd_HHmmss");
Date curDate = new Date();
String s= "data_log";//df3.format(curDate);
Log.d("log",files[0]);
File file = new File(Environment.getExternalStorageDirectory() + "/Android/data/com.wherephone.helloandroid/log_files/","barcode_log");
String new_file_name =s+".txt";
// File (or directory) with new name
File file2 = new File(Environment.getExternalStorageDirectory() + "/Android/data/com.wherephone.helloandroid/log_files/",new_file_name);
// Rename file (or directory)
if(!tempFile1.exists()){
boolean success = file.renameTo(file2);
Log.d(TAG," file name created");
if (success) {
// File was not successfully renamed
Log.d(TAG," file rename success");
}
else
{
Log.d(TAG," file not rename success");
}
}
ts.writeBarcodeToFile(" S L", "");
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
DataInputStream inputStream = null;
String pathToOurFile = Environment.getExternalStorageDirectory() + "/Android/data/com.wherephone.helloandroid/log_files/"+new_file_name;//zipName;
String urlServer = "http://xyz.com/xyz.php?fname="+s+".txt";
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "V2ymHFg03ehbqgZCaKO6jy";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 2*1024*1024;
FileInputStream fileInputStream=null;
try
{
ts.writeBarcodeToFile(" in try sl", "");
fileInputStream = new FileInputStream(new File(pathToOurFile) );
InetAddress iAddr = InetAddress.getByName("http://xyz.com");
URL url = new URL(urlServer);
connection = (HttpURLConnection) url.openConnection();
// Allow Inputs & Outputs
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
// Enable POST method
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
connection.setConnectTimeout(20000);
outputStream = new DataOutputStream( connection.getOutputStream() );
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd);
outputStream.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
ts.writeBarcodeToFile("before while sl ", "");
while (bytesRead > 0)
{
outputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
ts.writeBarcodeToFile("after while sl ", "");
// Responses from the server (code and message)
try{
int serverResponseCode = connection.getResponseCode();
String serverResponseMessage = connection.getResponseMessage();
if(serverResponseCode==200)
{
ts.writeBarcodeToFile("in if server response ", "");
//ts.writeBarcodeToFile("L S", "");
tempFile1.delete();
}
else
{
ts.writeBarcodeToFile("in else server response ", "");
ts.writeBarcodeToFile(serverResponseCode+"", "");
}
}
catch(Exception e)
{
try{
outputStream.flush();
outputStream.close();
}
catch(Exception ex)
{
}
ts.writeBarcodeToFile("in url catch response "+e.toString(), "");
connection.disconnect();
}
ts.writeBarcodeToFile("after server sl ", "");
fileInputStream.close();
outputStream.flush();
outputStream.close();
ts.writeBarcodeToFile("after close sl ", "");
}
catch (java.net.SocketTimeoutException e) {
try{
fileInputStream.close();
outputStream.flush();
outputStream.close();
}
catch(Exception ex)
{
}
ts.writeBarcodeToFile("in socketex sl "+e.toString(), "");
connection.disconnect();
}
catch (java.io.IOException e)
{
try{
fileInputStream.close();
outputStream.flush();
outputStream.close();
connection.disconnect();
}
catch(Exception ex)
{
}
ts.writeBarcodeToFile("in ioex sl "+e.toString(), "");
}
catch (Exception ex)
{
try{
fileInputStream.close();
outputStream.flush();
outputStream.close();
}
catch(Exception exy)
{
}
ts.writeBarcodeToFile("in catch sl "+ex.toString(), "");
connection.disconnect();
//Exception handling
}
//System.gc();
}
}
isRunning = false;
}