我想通過名爲Add的類中的http post發送字節數組中的文件。將文件發送到另一個類中的服務器
在一個名爲FileChooserActivity(擴展FragmentActivity)班,我必須選擇)稱爲onFileSelected(該文件的方法:
@Override
public void onFileSelected(File file) {
if (file != null) {
if (file.isDirectory()) {
replaceFragment(file);
} else {
finishWithResult(file);
setFile(file);
FileUtils futils = new FileUtils();
try {
futils.fullyReadFileToBytes(file);
} catch (IOException e) {
e.printStackTrace();
}
Log.v("file", file.toString());
Toast.makeText(FileChooserActivity.this, "File uploaded", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(this,AddAlerts.class);
intent.putExtra("file", file);
startActivity(intent);
}
} else {
Toast.makeText(FileChooserActivity.this, "Error selecting File", Toast.LENGTH_SHORT).show();
}
}
public File setFile(File file){
return file;
}
在一類名爲文件實用程序,我必須將文件轉換爲方法一個字節數組稱爲fullyReadFileToBytes:
public byte[] fullyReadFileToBytes(File file) throws IOException {
Log.v("fullyReadFileToBytes", file.toString());
int size = (int) file.length();
byte bytes[] = new byte[size];
byte tmpBuff[] = new byte[size];
FileInputStream fis= new FileInputStream(file);
try {
int read = fis.read(bytes, 0, size);
if (read < size) {
int remain = size - read;
while (remain > 0) {
read = fis.read(tmpBuff, 0, remain);
System.arraycopy(tmpBuff, 0, bytes, size - remain, read);
remain -= read;
}
}
} catch (IOException e){
throw e;
} finally {
fis.close();
}
Log.v("bytes[]", bytes.toString());
return bytes;
}
在一類稱爲WebConnection,我執行發送文件所需的所有HTTP POST方法。
任何關於如何在Add類中通過http post發送文件(字節數組形式)的方法來調用FileChooserActivity的onFileSelected()方法的建議?
思考,但沒有成功,因爲文件不被抓住/從FileChooserActivity正確引用所以它是空:
在Add.class:
FileChooserActivity fca = new FileChooserActivity();
File file = null;
fca.onFileSelected(file);
Log.v("file", file.toString());
conn.addValuePair("a_file[]", file.toString());
從結構上講,您的活動應該是調用其他類來執行工作的活動,而不是其他方式。不應該有任何理由必須嘗試實例化一個Activity來調用方法。如果你需要讓你的Activity在你的'Add'類完成一個動作的時候做些什麼,那麼在這種情況下,回調就是一種方法。 – NoChinDeluxe