'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 |
