此处的新手。 我正在创建一个应用程序,用户可以使用该应用程序在移动触摸屏上绘图并将该图像保存在他们的设备上。 随后,该图像必须通过ftp上传到服务器。
应用程序的第一部分运行良好。用户可以在其移动设备上绘制并记录图像。
当我尝试通过ftp上传它时,问题就来了,它总是返回此错误:
W / System.err:android.os.NetworkOnMainThreadException W / System.err:
在 android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) W / System.err:位于 libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)W / System.err:
在libcore.io.IoBridge.connectErrno(IoBridge.java:137)W / System.err:
在libcore.io.IoBridge.connect(IoBridge.java:122)W / System.err:在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) W / System.err:位于 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452) W / System.err:位于java.net.Socket.connect(Socket.java:884)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_firma);
verifyStoragePermissions(this);
paintView = (PaintView) findViewById(R.id.paintView);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
paintView.init(metrics);
guarda = (Button)findViewById(R.id.buttonAceptar);
guarda.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String NombreFichero = "filename.jpg";
try {
paintView.setDrawingCacheEnabled(true);
Bitmap bitmap = paintView.getDrawingCache();
File f = null;
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(Environment.getExternalStorageDirectory(),"TTImages_cache");
if(!file.exists()){
file.mkdirs();
}
f = new File(file.getAbsolutePath()+file.separator+ NombreFichero+".jpg");
}
FileOutputStream ostream = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.JPEG, 10, ostream);
Toast.makeText(FirmaActivity.this, "Grabado correctamente", Toast.LENGTH_LONG).show();
ostream.close();
new Thread(){
public void run(){
FirmaActivity.this.runOnUiThread(new Runnable(){
public void run(){
goforIt();
}
});
}
}.start();
} catch(Exception e){
e.printStackTrace();
Toast.makeText(FirmaActivity.this, "Error al grabar", Toast.LENGTH_LONG).show();
}
}
});
}
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
Toast.makeText(FirmaActivity.this, "OK-0", Toast.LENGTH_LONG).show();
con.connect("127.0.0.1"); //HERE STOP DE APP
Toast.makeText(FirmaActivity.this, "OK-1", Toast.LENGTH_LONG).show();
if (con.login("pepe", "123"))
{
con.enterLocalPassiveMode();
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/TTImages_cache/filename.png";
FileInputStream in = new FileInputStream(new File(data));
boolean result = con.storeFile("/filename.jpg", in);
in.close();
if (result) Log.v("upload result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
Log.v("upload result", "UPS!");
e.printStackTrace();
}
}
}
我已经尝试了不同的ftp服务器,它们可以正常工作,并通过Filezilla进行了测试。但是我没有得到结果。
在Android清单中,我已授予权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
有什么建议吗?谢谢!