Merge branch '64-login-functionality-with-retrofit' into 'master'

Resolve "Login functionality with Retrofit"

Closes #64

See merge request marcel.schwarz/2020ss-qbc-geofence-timetracking!41
This commit is contained in:
Tobias Wieck 2020-05-17 14:13:36 +00:00
commit 3c42d55881
6 changed files with 81 additions and 3 deletions

View File

@ -45,4 +45,7 @@ dependencies {
implementation 'androidx.navigation:navigation-ui-ktx:2.2.2' implementation 'androidx.navigation:navigation-ui-ktx:2.2.2'
implementation "android.arch.navigation:navigation-fragment-ktx:2.2.2" implementation "android.arch.navigation:navigation-fragment-ktx:2.2.2"
implementation "android.arch.navigation:navigation-ui-ktx:2.2.2" implementation "android.arch.navigation:navigation-ui-ktx:2.2.2"
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
} }

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.hft.geotracker"> package="de.hft.geotracker">
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="true" android:allowBackup="true"
@ -8,8 +9,10 @@
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity android:name=".Register"></activity>
<activity android:name=".Register" />
<activity <activity
android:name=".Settings" android:name=".Settings"
android:label="@string/title_activity_settings" /> android:label="@string/title_activity_settings" />

View File

@ -0,0 +1,12 @@
package de.hft.geotracker
import retrofit2.Call
import retrofit2.http.*
interface GeofenceService {
@POST("/login")
fun login(@Body login_data : ValuesUserLogin) : Call<Void>
}

View File

@ -0,0 +1,3 @@
package de.hft.geotracker
data class JWToken (var token : String)

View File

@ -4,7 +4,13 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import android.widget.TextView import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
/** /**
* A simple [Fragment] subclass. * A simple [Fragment] subclass.
@ -12,11 +18,22 @@ import androidx.appcompat.app.AppCompatActivity
class Login : AppCompatActivity() { class Login : AppCompatActivity() {
lateinit var login : TextView lateinit var login : TextView
lateinit var reg : TextView lateinit var reg : TextView
lateinit var service : GeofenceService
lateinit var token : JWToken
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login) setContentView(R.layout.activity_login)
val retrofit = Retrofit.Builder()
.baseUrl("http://plesk.icaotix.de:5000")
.addConverterFactory(GsonConverterFactory.create())
.build()
service = retrofit.create(GeofenceService::class.java)
login = findViewById(R.id.button_create_account) login = findViewById(R.id.button_create_account)
login.setOnClickListener { login.setOnClickListener {
intent = Intent(this, MainActivity::class.java)
login() login()
} }
reg = findViewById(R.id.button_register) reg = findViewById(R.id.button_register)
@ -31,7 +48,35 @@ class Login : AppCompatActivity() {
} }
private fun login() { private fun login() {
val intent = Intent(this, MainActivity::class.java) val name = findViewById<TextView>(R.id.setting_input_username).text.toString()
startActivity(intent) val pswd = findViewById<TextView>(R.id.input_password).text.toString()
var call= service.login(ValuesUserLogin(name, pswd))
call.enqueue(object : Callback<Void> {
override fun onResponse(call: Call<Void>?, response: Response<Void>?) {
if(response != null && response.isSuccessful) {
var headers = response.headers()
var authentication = headers.get("Authorization")
token = JWToken(authentication)
println(response.code())
println(token.token)
startActivity(intent)
} else {
if (response != null) {
println(response.code())
Toast.makeText(this@Login, "Wrong Username or Password!", Toast.LENGTH_LONG).show()
} else {
println("Response is null")
}
}
}
override fun onFailure(call: Call<Void>?, t: Throwable?) {
println("Error: ${t.toString()}")
}
})
} }
} }

View File

@ -0,0 +1,12 @@
package de.hft.geotracker
import com.google.gson.annotations.SerializedName
class ValuesUserLogin (name : String, pswd : String) {
@SerializedName("username")
var username = name
@SerializedName("password")
var password = pswd
}