'creating files and directories in Android in Kotlin + printing out a line in dynamic TextView

I am trying to create a directory and place a file inside it. When I run the app (either in Android Studio emulator or extracting the .apk and installing it manually) and check files, nothing is created and I couldnt find why.

I am trying to do it in internal storage, and I read that no permissions are required to do that.

Heres the code:

    package com.cerowski.nfcclient

import android.app.Activity
import java.io.File

import android.os.Bundle
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.tabs.TabLayout
import androidx.viewpager.widget.ViewPager
import androidx.appcompat.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import android.widget.TextView
import com.cerowski.nfcclient.ui.main.SectionsPagerAdapter
import com.cerowski.nfcclient.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val sectionsPagerAdapter = SectionsPagerAdapter(this, supportFragmentManager)
        val viewPager: ViewPager = binding.viewPager
        viewPager.adapter = sectionsPagerAdapter
        val tabs: TabLayout = binding.tabs
        tabs.setupWithViewPager(viewPager)
        val fab: FloatingActionButton = binding.fab



        fab.setOnClickListener { view ->
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
        }
    }

    fun main(){
        //val filename="/com.cerowski.nfcclient/config"
        val file = File("/storage/emulated/0/Android/data/com.cerowski.nfcclient/files/config")
        //val dir = File ("/storage/emulated/0/Android/data/com.cerowski.nfcclient/files/")
        val dir= this.getExternalFilesDir(null)
        var msgtext: String;

        //var fileExists = file.exists()
        if (dir!=null){
            if (!dir.isDirectory()) {msgtext= "app directory not found" ;  dir.mkdir();
                if(dir.isDirectory()){println("App directory created successfully")}
                else {println("Cannot create app directory")}}
            else {if (!file.exists()) {println("config file not found"); file.createNewFile();
                if(file.exists()){println("Config file created successfully"); file.writeText("Hello") }
                else {println("Cannot create file")}}
            else {println(file.readText())}}
    }}
}



//val msg = TextView (this); msg.text=msgtext; mainlayout.addView(msg);

Also, How do I print a line in android? I have tried doing it through dynamic TextView but I do not know what context to put in this line: val msg = TextView (this); (it works when it is under the onCreate function, but not under main) + mainlayout.addView(msg) does not work either indicating an unresolved reference (mainlayout is the ID of the layout set in activity_main.xml)



Solution 1:[1]

Fixed it. So for ultra-beginners who literally know nothing about the language (like me):

It seems like every bit of code in Kotlin needs to be in a function. I called main function in onCreate() function and it worked.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState) 
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    main()
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Islam Assem