diff --git a/README.md b/README.md index bdd11c8b..3d237c6f 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,101 @@ # Rapport -**Skriv din rapport här!** +Detta är rapporten för Networking -_Du kan ta bort all text som finns sedan tidigare_. +I activity_main.xml lade det till en recyclerview. +``` + +``` -## Följande grundsyn gäller dugga-svar: +En ny xml fill lades till för att visa hur elementen i recyclerview ska se ut. +``` + + -- Ett kortfattat svar är att föredra. Svar som är längre än en sida text (skärmdumpar och programkod exkluderat) är onödigt långt. -- Svaret skall ha minst en snutt programkod. -- Svaret skall inkludera en kort övergripande förklarande text som redogör för vad respektive snutt programkod gör eller som svarar på annan teorifråga. -- Svaret skall ha minst en skärmdump. Skärmdumpar skall illustrera exekvering av relevant programkod. Eventuell text i skärmdumpar måste vara läsbar. -- I de fall detta efterfrågas, dela upp delar av ditt svar i för- och nackdelar. Dina för- respektive nackdelar skall vara i form av punktlistor med kortare stycken (3-4 meningar). + -Programkod ska se ut som exemplet nedan. Koden måste vara korrekt indenterad då den blir lättare att läsa vilket gör det lättare att hitta syntaktiska fel. + +``` +Mountain class var skapad and given geters and seters. ``` -function errorCallback(error) { - switch(error.code) { - case error.PERMISSION_DENIED: - // Geolocation API stöds inte, gör något - break; - case error.POSITION_UNAVAILABLE: - // Misslyckat positionsanrop, gör något - break; - case error.UNKNOWN_ERROR: - // Okänt fel, gör något - break; +public class Mountain { + + private String name; + @SerializedName("location") + private String place; + @SerializedName("size") + private int hight; + + public Mountain(String name){ + this.name = name; + } + + public void setName(String name) { + this.name = name; + } +``` + +I mainActivity.java sättes en arraylist av mountains, RecyclerViewAdaptern skapades +och recView sates som RecyclerView. +``` +Mountains = new ArrayList<>(Arrays.asList( + new Mountain("Billigen"), + new Mountain("Mount Everest"), + new Mountain("Uluru") +)); + +recViewAdapter = new RecyclerViewAdapter(this, Mountains); + +recView = findViewById(R.id.recycler_view); +recView.setLayoutManager(new LinearLayoutManager(this)); +recView.setAdapter(recViewAdapter); +``` + +RecycelViewAdapter.java kopierades från guiden och allt om onclick togs bort +och en update metod skapades. +``` +public class ViewHolder extends RecyclerView.ViewHolder { + TextView title; + + ViewHolder(View itemView) { + super(itemView); + title = itemView.findViewById(R.id.title); } } + +public void updateAdapter(ArrayList newItems){ + items.addAll(newItems); +} + ``` -Bilder läggs i samma mapp som markdown-filen. +Till sista så lades det till i onPostExecute i mainActivity.java så bergen från JSON mappen +läggs till i listan av berg. +``` +Type type = new TypeToken>() {}.getType(); +ArrayList listOfMountains = gson.fromJson(json, type); -![](android.png) +recViewAdapter.updateAdapter(listOfMountains); +recViewAdapter.notifyDataSetChanged(); +``` -Läs gärna: +på grund av firewall så gorde jag inte JSON hämtningen från websidan. -- Boulos, M.N.K., Warren, J., Gong, J. & Yue, P. (2010) Web GIS in practice VIII: HTML5 and the canvas element for interactive online mapping. International journal of health geographics 9, 14. Shin, Y. & -- Wunsche, B.C. (2013) A smartphone-based golf simulation exercise game for supporting arthritis patients. 2013 28th International Conference of Image and Vision Computing New Zealand (IVCNZ), IEEE, pp. 459–464. -- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M.C., Regnell, B., Wesslén, A. (2012) Experimentation in Software Engineering, Berlin, Heidelberg: Springer Berlin Heidelberg. +![](Screenshot_Networking.png) diff --git a/Screenshot_Networking.png b/Screenshot_Networking.png new file mode 100644 index 00000000..ef687585 Binary files /dev/null and b/Screenshot_Networking.png differ diff --git a/app/build.gradle b/app/build.gradle index ff9c03db..ae747f29 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,6 +29,8 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.google.code.gson:gson:2.9.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'com.google.code.gson:gson:2.10.1' } task archive(type: Zip) { diff --git a/app/src/main/java/com/example/networking/MainActivity.java b/app/src/main/java/com/example/networking/MainActivity.java index c72a5e42..d4f21bc1 100644 --- a/app/src/main/java/com/example/networking/MainActivity.java +++ b/app/src/main/java/com/example/networking/MainActivity.java @@ -4,24 +4,59 @@ import android.util.Log; import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; @SuppressWarnings("FieldCanBeLocal") public class MainActivity extends AppCompatActivity implements JsonTask.JsonTaskListener { - private final String JSON_URL = "HTTPS_URL_TO_JSON_DATA_CHANGE_THIS_URL"; + private final String JSON_URL = "https://mobprog.webug.se/json-api?login=brom"; private final String JSON_FILE = "mountains.json"; + private ArrayList Mountains; + + private RecyclerView recView; + private RecyclerViewAdapter recViewAdapter; + + private Gson gson = new Gson(); + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + Mountains = new ArrayList<>(Arrays.asList( + new Mountain("Billigen"), + new Mountain("Mount Everest"), + new Mountain("Uluru") + )); + + recViewAdapter = new RecyclerViewAdapter(this, Mountains); + + recView = findViewById(R.id.recycler_view); + recView.setLayoutManager(new LinearLayoutManager(this)); + recView.setAdapter(recViewAdapter); + new JsonFile(this, this).execute(JSON_FILE); + + } @Override public void onPostExecute(String json) { Log.d("MainActivity", json); + Type type = new TypeToken>() {}.getType(); + ArrayList listOfMountains = gson.fromJson(json, type); + + recViewAdapter.updateAdapter(listOfMountains); + recViewAdapter.notifyDataSetChanged(); } } diff --git a/app/src/main/java/com/example/networking/Mountain.java b/app/src/main/java/com/example/networking/Mountain.java new file mode 100644 index 00000000..cf75ede7 --- /dev/null +++ b/app/src/main/java/com/example/networking/Mountain.java @@ -0,0 +1,49 @@ +package com.example.networking; + +import com.google.gson.annotations.SerializedName; + +public class Mountain { + + private String name; + @SerializedName("location") + private String place; + @SerializedName("size") + private int hight; + + public Mountain(String name){ + this.name = name; + } + + public void setName(String name) { + this.name = name; + } + + public void setPlace(String place) { + this.place = place; + } + + public void setHight(int hight) { + this.hight = hight; + } + + public String getName() { + return name; + } + + public String getPlace() { + return place; + } + + public int getHight() { + return hight; + } + + @Override + public String toString() { + return "Mountain{" + + "Name='" + name + '\'' + + ", Place='" + place + '\'' + + ", Hight=" + hight + + '}'; + } +} diff --git a/app/src/main/java/com/example/networking/RecyclerViewAdapter.java b/app/src/main/java/com/example/networking/RecyclerViewAdapter.java new file mode 100644 index 00000000..006567aa --- /dev/null +++ b/app/src/main/java/com/example/networking/RecyclerViewAdapter.java @@ -0,0 +1,54 @@ +package com.example.networking; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +public class RecyclerViewAdapter extends RecyclerView.Adapter { + + private List items; + private LayoutInflater layoutInflater; + + RecyclerViewAdapter(Context context, List items) { + this.layoutInflater = LayoutInflater.from(context); + this.items = items; + } + + @Override + @NonNull + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(layoutInflater.inflate(R.layout.list_layout, parent, false)); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + holder.title.setText(items.get(position).getName()); + } + + @Override + public int getItemCount() { + return items.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView title; + + ViewHolder(View itemView) { + super(itemView); + title = itemView.findViewById(R.id.title); + } + } + + public void updateAdapter(ArrayList newItems){ + items.addAll(newItems); + } + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc24441..702e6531 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,10 +6,10 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - + + + + + \ No newline at end of file