- Forum-Beiträge: 602
21.05.2020, 21:21:36 via Website
21.05.2020 21:21:36 via Website
Hallo zusammen
Ich lerne zur Zeit Kotlin. Dazu verwende ich ein Buch mit Beispielen. In einem Programm komme ich nicht weiter. Das Programm soll den Namen, Telefonnummer und die E-Mail Adresse in die Kontakte schreiben. Aber das Beispiel läuft bei mir nicht.
package ch.robbisoft.sysstemkontakt
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.Manifest
import android.support.v4.app.*
import android.content.Intent
import android.provider.ContactsContract.Contacts
import java.util.ArrayList
import android.content.ContentProviderOperation
import android.provider.ContactsContract.AUTHORITY
import android.provider.ContactsContract.Data
import android.provider.ContactsContract.RawContacts
import android.provider.ContactsContract.CommonDataKinds.Email
import android.provider.ContactsContract.CommonDataKinds.Phone
import android.provider.ContactsContract.CommonDataKinds.StructuredName
const val KONSTANTE_KONTAKT = 123
class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsResultCallback {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS) != PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_CONTACTS), KONSTANTE_KONTAKT)
buLesen.setOnClickListener {
kontaktlisteAnzeigen()
}
buNeu.setOnClickListener {
val cpoListe = ArrayList<ContentProviderOperation>()
val kontaktId = 0
var cpob = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
//Eintrag in Kontaktliste
cpob.withValue(RawContacts.ACCOUNT_TYPE, null)
cpob.withValue(RawContacts.ACCOUNT_NAME, null)
var cpo = cpob.build()
cpoListe.add(cpo)
//Name
cpob = ContentProviderOperation.newInsert(Data.CONTENT_URI)
cpob.withValueBackReference(Data.RAW_CONTACT_ID, kontaktId)
cpob.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
cpob.withValue(StructuredName.DISPLAY_NAME, edName.text.toString())
cpo = cpob.build()
cpoListe.add(cpo)
//Nummer
cpob = ContentProviderOperation.newInsert(Data.CONTENT_URI)
cpob.withValueBackReference(Data.NAME_RAW_CONTACT_ID, kontaktId)
cpob.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
cpob.withValue(Phone.NUMBER, edPhone.text.toString())
cpob.withValue(Phone.TYPE, Phone.TYPE_MOBILE)
cpo = cpob.build()
cpoListe.add(cpo)
//Mail
cpob = ContentProviderOperation.newInsert(Data.CONTENT_URI)
cpob.withValueBackReference(Data.RAW_CONTACT_ID, kontaktId)
cpob.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
cpob.withValue(Email.ADDRESS, edMail.text.toString())
cpob.withValue(Email.TYPE, Email.TYPE_HOME)
cpo = cpob.build()
cpoListe.add(cpo)
contentResolver.applyBatch(AUTHORITY, cpoListe)
kontaktlisteAnzeigen()
}
}
private fun kontaktlisteAnzeigen() {
val kontakteActivity = Intent(Intent.ACTION_VIEW, ContactsContract.Contacts.CONTENT_URI)
startActivity(kontakteActivity)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray) {
if (requestCode == KONSTANTE_KONTAKT && grantResults.isNotEmpty() && grantResults[0] != PERMISSION_GRANTED)
finish()
}
}
Trotz dem Import will er das "AppCompatActivity()" aus
class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsResultCallback {
nicht erkennen. Weiter ist auch "ActivityCompat" rot unterlegt.
Im weiteren kann er den folgenden Import nicht machen
import android.support.v7.app.AppCompatActivity
Er will das "v7" nicht kennen.
Wenn ich alle imports mache damit es funktioniert, dann verabschiedet sich die app bei der folgenden Zeile:
contentResolver.applyBatch(AUTHORITY, cpoListe)
mit einer nullpointer exeption.
Die Build.gradle habe ich auch schon verglichen. An dem sollte es nicht liegen. Wo kann ich noch nach Fehlern suchen?
Gruss Renato
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.