0

I am trying to build a ftp app for android using java to upload on a server in our network, but i have some problems with the android integration. I wrote the code in java and it works but when i running it on android i get some errors. If i try running it without the internet or network state permission, it runs but the file won't upload. When i give that permissions and run the application it crashes when trying to connect. This is one of my first time using andorid studio and i didn't find much help online about ftp aplications either.

This is the code i use for connecting to the server.

private void conTest() {
    String server = "";
    int port = 21;
    String user = "";
    String pass = "";
    FTPClient ftpClient = new FTPClient();
    try {
        ftpClient.connect(server, port);
        ftpClient.login(user, pass);
        ftpClient.enterLocalPassiveMode();
    }catch(IOException ex){
        ex.printStackTrace();
    }//catchIO exception ex
}

And in log cat it shows the error:

    2021-04-02 16:33:19.985 5083-5145/com.example.myapplicationtestmenu D/EGL_emulation: eglMakeCurrent: 0xd0565540: ver 3 0 (tinfo 0xeb2c7d90)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err: java.lang.IllegalArgumentException: Unknown URI: content://downloads/public_downloads/6
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.content.ContentResolver.query(ContentResolver.java:802)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.content.ContentResolver.query(ContentResolver.java:752)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.content.ContentResolver.query(ContentResolver.java:710)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at com.example.myapplicationtestmenu.RealPathUtil.getDataColumn(RealPathUtil.java:124)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at com.example.myapplicationtestmenu.RealPathUtil.getPath(RealPathUtil.java:59)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at com.example.myapplicationtestmenu.Getfile.onActivityResult(Getfile.java:70)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.Activity.dispatchActivityResult(Activity.java:7454)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
2021-04-02 16:33:20.606 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
2021-04-02 16:33:20.607 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.os.Looper.loop(Looper.java:193)
2021-04-02 16:33:20.607 5083-5083/com.example.myapplicationtestmenu W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6669)
2021-04-02 16:33:20.607 5083-5083/com.example.myapplicationtestmenu W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2021-04-02 16:33:20.607 5083-5083/com.example.myapplicationtestmenu W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
2021-04-02 16:33:20.607 5083-5083/com.example.myapplicationtestmenu W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2021-04-02 16:33:20.648 5083-5083/com.example.myapplicationtestmenu D/AndroidRuntime: Shutting down VM
2021-04-02 16:33:20.651 5083-5083/com.example.myapplicationtestmenu E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplicationtestmenu, PID: 5083
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.providers.downloads.documents/document/6 flg=0x1 }} to activity {com.example.myapplicationtestmenu/com.example.myapplicationtestmenu.Getfile}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4360)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:389)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:621)
        at org.apache.commons.net.SocketClient._connect(SocketClient.java:253)
        at org.apache.commons.net.SocketClient.connect(SocketClient.java:212)
        at com.example.myapplicationtestmenu.Getfile.conectareee(Getfile.java:87)
        at com.example.myapplicationtestmenu.Getfile.onActivityResult(Getfile.java:72)
        at android.app.Activity.dispatchActivityResult(Activity.java:7454)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
2021-04-02 16:33:20.659 5083-5083/com.example.myapplicationtestmenu I/Process: Sending signal. PID: 5083 SIG: 9

This is the java class:

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class Getfile extends AppCompatActivity {

    Button pick;
    TextView viewPath;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_getfile);
        Log.v("TAG1","Start");
        pick=findViewById(R.id.pick);
        viewPath=findViewById(R.id.path);

        if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(Getfile.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
        }


        pick.setOnClickListener(v -> {
            Intent intent =new Intent();
            intent.setType("*/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent,1);
            //ftpUpload.Test();
            Log.v("TAG2","Note");

        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode , Intent data){
        super.onActivityResult(requestCode,resultCode,data);
        if(requestCode==1 && resultCode==Activity.RESULT_OK) {
            Uri uri = data.getData();
            Context context = getApplicationContext();
            String path = RealPathUtil.getPath(context, uri);
            viewPath.setText("Uri= " + uri.toString() + "\n\nPath= " + path);
            conectareee();
            Log.v("we are here","-----------------------------------------------------");
        }

    }

    private void conectareee() {
        String server = "";
        int port = 21;
        String user = "";
        String pass = "";

        FTPClient ftpClient = new FTPClient();

        try {
            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();
            Log.v("connected","Connected");
        }catch(IOException ex){
            ex.printStackTrace();
            Log.v("Not connected","Not");
        }//catchIO exception ex
    }

And the manifest file contains:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
cxda
  • 11
  • 1

0 Answers0