Fråga: Ny på apputveckling, kodfrågor!

Diskussion i 'Applikationsutveckling' startad av DeniceML, 29 sept 2020.

  1. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    Hej!
    I en tidigare tråd berättade jag över frustrationen över att jag inte hänger med i saker och ting, här kommer lite mer konkreta exempel på saker som jag har problem med.

    Till och börja med:
    Det här är de 3 videos som vi skulle ha gjort i förra veckan eller vad det nu var och jag gjorde koden precis som i filmen (tyckte jag) men det funkade inte som jag ville. Idag provade jag på nytt och vissa delar gick super, andra inte, nu funkar inget :)

    Film 1 (
    View: https://www.youtube.com/watch?v=bgIUdb-7Rqo
    ) - Gick bra, we cool.
    Film 2 (
    View: https://www.youtube.com/watch?v=UJN3AL4tiqw&t=408s
    ) - Gick också bra men jag fick inte upp min lifecycle i Logcat. Försökte google mig fram till problemet och hittade någonstans att jag skulle kolla vilka inställningarna var för run (om det var default activity eller yada yada.) så jag testade mig fram och det funkade inte. Okej never mind, det löser sig kanske sen.
    Film 3 (
    View: https://www.youtube.com/watch?v=6mnEfiq9fV4
    ) - (Den här återkopplar lite till min tidigare tråd om det där med att det känns som om jag bara ska veta innan jag kodar exakt vad som ska skrivas, vilket jag inte gör. Hänger tyyyp med i filmen, tycker den går lite snabbt.) När jag ska köra denna, så startar den aktivitet 1 endast. Okej, tänkte jag och stängde ner det fönstret för tänkte att det kanske krockade. Startade emulatorn igen, dock fortfarande på aktivitet 1. Så då stängde jag av apparna i emulatorn och provade köra run igen som vanligt. Men nu vill ingen app öppna sig.
    Aktivitet 1 har nu fått ett meddelande som säger:

    Kod:
    error: class, interface, or enum expected
        protected void onCreate(Bundle savedInstanceState) {
                  ^
    Och den var inte där innan...

    Så något har jag obviously gjort fel, kan det kanske ha och göra med det jag ändrade i konfigurationen där i run? Och sen vill jag också ha hjälp med varför jag inte kan se min Logcat då då.

    Jag är även ny här på swedroid så försöker bäst jag kan! <3
     
  2. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Tror inte felet har med run configs, men svårt att säga utan att se koden. Funderar på om du har något felstavat eller syntax error som ger dig det felet men nu gissar jag enbart.
     
  3. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER


    Okej, Jag tror att jag kan ha lagt koden på fel ställe eller något kanske? I film 2 från 2:40 så har han ju lagt in alla onCreate osv. (vilket inte fanns i film1) men där finns inte Button button och allt från film 1 kvar. Jag la därför in den i onCreate men det kanske var fel? Nu har jag flyttat om saker så mycket så nu vet jag inte vart det låg när det funkade första gången.. Samt vilken är "standard" run config? Så att jag har den tillbaka på rätt med för den har jag klickat runt i en del också och förvirrat mig.

    Här är koden iaf. Förstår ganska lite tbh men tycker mig ha skrivit av filmerna och försökt kolla på felstavningar och måsvingar osv.

    Kod:
    package com.example.firstsubmission;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
        private Button button;
        private static final String TAG = "MainActivity";
    
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Log.i(TAG, "onCreate");
    
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    openActivity2();
    
                }
            });
    
        }
    
    
        @Override
        protected void onStart() {
            super.onStart();
    
            Log.i(TAG, "onStart");
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
    
            Log.i(TAG, "onResume");
    
        }
    
        @Override
        protected void onPause() {
            super.onPause();
    
            Log.i(TAG, "onPause");
    
        }
    
        @Override
        protected void onStop() {
            super.onStop();
    
            Log.i(TAG, "onStop");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
    
            Log.i(TAG, "onDestroy");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
    
            Log.i(TAG, "onRestart");
        }
        public void openActivity2() {
            Intent intent = new Intent(this, Activity2.class);
            startActivity(intent);
        }
    
    }
    

    Tack för hjälp!
     
  4. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Rad 15 (om jag räknade rätt, två rader under TAG) där stänger du din MainActivity klass. Den måsvingen ska bort för du ska override:a ting inuti AppcompatActivity.
     
  5. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    Okej, tack! Det hjälpte, nu funkar det med knapparna och jag kan se livscykeln i min logcat! :D Däremot fick jag nu ett nytt error i en annan del av koden. (Insåg att jag har 2 XML filer och 3 st .java, ska det vara så? eller kan det också vara en faktor?)

    I onActivityResult så vill de att jag ska "add super call", men det gör han ju inte i filmen (film 3). Varför behöver jag då göra det? Så än så länge får jag inte upp det jag ska kunna göra i film 3 och kan inte starta den appen...

    Här kommer den koden:

    Kod:
    package com.example.firstsubmission;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.ImageView;
    
    import java.util.Locale;
    
    public class submission1part3 extends AppCompatActivity {
    
        static final int REQUEST_IMAGE_CAPTURE = 1;
        ImageView i;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_submission1part3);
            i = (ImageView)findViewById(R.id.iv);
        }
    
        public void photo(View v) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (intent.resolveActivity(getPackageManager()) !=null) {
                startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                Bitmap imageBitmap =(Bitmap) data.getExtras().get("data");
                i.setImageBitmap(imageBitmap);
            }
    
        }
    
    
    
        public void Location(View v) {
            String uri = String.format(Locale.ENGLISH, "geo:%f,%f",
                    51.509865,-0.118092);
    
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
            startActivity(intent);
    
        }
    }
     
  6. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

  7. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER


    Okej, efter mycket om och men, och kasta runt i koden så lyckades jag på något vis och vänster lösa det. Mycket var att trycka alt+enter och låta koden lösa det själv (vilket jag inte hänger med på vilket jag tycker är tråkigt), som till exempel behövde jag suppress en del av min kod och fick en @SupressLint helt plötsligt. Vad gör den och varför? Varför har inte han i filmen en sån?

    Som sagt, det löste sig och nu kommer jag åt Maps och kamera i min emulator men vet knappt hur eller varför, men kanske är som alla säger "Det släpper sen".
     
  8. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Alt-enter är bland annat för att automatiskt hämta in rätt paket. Det sparar extremt mycket tid. Sen kan dig hjälpa med andra saker som tex Lint.

    Istället för att tex skriva
    Kod:
    public class submission1part3 extends androidx.appcompat.app.AppCompatActivity {
    android.widget.ImageView i;
    Så räcker det att skriva ImageView och AppCompatActivity som du gjort och sedan så känner din IDE (programmet du använder) att det är ImageView från android.widget du vill ha och IDEn lägger till import android.widget.ImageView etc. Det är inget du ska känna ånger för att du missar, men det kan vara bra att ha koll på var du vill ha saker ifrån.

    Om det finns flera ImageView i olika paket skulle du få upp frågan vilket paket du vill importera.

    Lint är ett program/funktion för att kolla koden efter problem/smuts/felaktigheter, det kan t.ex vara att du inte har lagt till en contentDescription på en ImageView (contentDescription är texten som läses upp av talkback för de som kanske inte ser så bra).
    De i videon kanske har supressat Lint på en annan plats, det går att ställa in att man ignorerar saker på lite olika ställen. För din skull nu skulle jag struntat i det. Du kan också ställa in så att Lint inte avbryter ditt bygge av din app.
     
    RuffyMan gillar detta.
  9. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    Okej, tack så mycket för förtydligande och för svar! :) Det är den här sortens tydlighet och förenkling som jag behöver.
     
  10. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    Då har jag en ny fråga!

    Vi kollar just nu på den här filmen:
    View: https://www.youtube.com/watch?v=EOfCEhWq8sg&t=676s

    Och jag tänkte att jag skulle göra dom sakerna som han gör i filmen och försöka köra learning by doing parallellt. Däremot så ser min main.activity inte alls ut som hans i filmen. Jag får en hel del rött och min "start"-kod ser inte ut som hans heller. Börjar jag ändra om i den så får jag jättemycket röda markeringar.

    Vad är det jag behöver göra? Måste jag create class, och göra sånt (som jag inte tycker att jag fått lära mig ännu) eller har jag skrivit fel någonstans där jag inte ser?

    Tack för hjälp, nedan är kod!

    Kod:
    package com.example.testfilmforbeginners;
    
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.Button
    import android.widget.SeekBar
    import android.widget.TextView
    import java.util.*
    
    import static java.lang.System.in;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            val rollButton = findViewById<Button>(R.id.rollButton)
            val resultsTextView = findViewById<TextView>(R.id.resultsTextView)
            val seekbar = findViewById <SeekBar>(R.id.seekBar)
    
            rollbutton.setOnClickListener {
                val rand = Random().nextInt(seekBar.progress) + 1
                resultsTextView.text = rand.toString()
    
            }
        }
    }
     
  11. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Hans kod och delar av din (den röda, tex "val") är i Kotlin och inte Java. Det är ett annat språk, en app kan vara skriven i båda men du kan inte blanda så du försöker göra (med Kotlin-kod i en .java)
     
  12. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    men vad i ...
    jaha?! okej, tack för svar iaf! Då låter jag det hela vara rött och olöst då.
    Java kan skrivas i Kotlin, men Kotlin kan inte skrivas i Java va? Har för mig att jag läst det. Samt att någon då nämnde att "är du helt nybörjare så börjar du förslagsvis med java". Varav mitt val av språk.
     
  13. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    Så!
    Då har jag fått lite nya bekymmer.
    Jag ska då skriva två kortare texter/ meningar. Jag vet att jag kan skriva det som

    android:text="minmening"
    och få det att synas direkt. Men då jag tänkte ha en liiiite längre mening så såg jag på en film att jag kunde skapa en egen xml fil enbart för mina strings och där i skapa kortare namn (id?) som jag sedan kan använda i min android:text="".

    När jag gör detta så .. går det inte.. såklart.

    så här ser xml-string filen ut

    Kod:
    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.example.lab1.MainActivity"/>
    
    <resources
        <string name="app_name">Bohus</string>
        <string name="hello">Välkommen till Bohus!</string>
        <string name="info">Den lantliga orten nära Göteborg. Plocka blåbär och gå i Vättlefjäll,
            eller varför inte besöka vår nya Coop?!</string>
    
    </resources>
    om jag i min main-xml skriver in android:text="app_name" så funkar det typ... jag får upp appens namn vilket är lab 1. Så det blir ju fel. Men själva funktionen som jag är ute efter funkar ju så jag funderar på om det är ifall alla heter name som är problemet eller om det är något annat?
    Jag har då provat byta ut name till andra namn men det har inte hjälpt.

    ett exempel på min main-xml är

    Kod:
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello"
            android:textAlignment="center"
            android:textColor="#000000"
            android:textSize="60sp" />
    I min design så står det så @string@string/hello och inte Välkommen till Bohus! Vilket är det som jag vill att det ska stå..

    tacksam för hjälp och svar!
     
  14. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Har du flera strings.xml eller nagot liknande? Testa med denna
    strings.xml:
    Kod:
    <resources>
        <string name="app_name">Bohus</string>
        <string name="hello">Välkommen till Bohus!</string>
        <string name="info">Den lantliga orten nära Göteborg. Plocka blåbär och gå i Vättlefjäll,
            eller varför inte besöka vår nya Coop?!</string>
    </resources>
    
    Sa borde det fungera med android:text="@string@string/hello"
     
  15. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER


    Jag har en som heter colors? Eller tänker du mer rent allmänt i mina projekt? Tror iofs oavsett att jag bara har en...
    Har haft det du skrev i början också, men då var det supermycket rött så när jag la till det andra ovanför <resources> så gick det bättre men ändå inte helt :/
     
  16. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Tänkte i projektet nu, om du har flera string resurser med samma namn. En string.xml jag sitter med nu ser enbart ut som den jag skrev till dig och det fungerar.
    Bygger inte projektet eller vad är fel?

    Ibland kan det vara lönt att tömma cachen och starta om android studio.
    File > Invalidate caches / restart > Invalidate and restart.
     
  17. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    Nej precis, projektet körs inte och i designvyn för xml så stor det @string@string/hello och det vill jag ju inte ha..
    Provade tömma cachen och starta om android studio men det hjälpte inte heller :/
     
  18. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Var ligger din strings.xml?
     
  19. DeniceML

    DeniceML Baby Droid Medlem

    Blev medlem:
    28 sept 2020
    Inlägg:
    23
    Mottagna gillanden:
    2

    MINA ENHETER

    i samma projekt som min activity_main- xml.
     
  20. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 392
    Mottagna gillanden:
    2 132

    MINA ENHETER

    Syftar på fullständig adress/path. Låter som om den ev ligger fel iom den inte plockas upp.