• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Logowanie w Android studio,problem z biblioteką Volley

VPS Starter Arubacloud
0 głosów
199 wizyt
pytanie zadane 10 listopada 2018 w Java przez Mateusz Łuczak Nowicjusz (160 p.)
edycja 10 listopada 2018 przez Mateusz Łuczak

Witam,robię logowanie w android studio z wykorzystaniem php oraz json.

Jeśli udało się zalogować tworzę taki oto kod w Jsonie:

{"error":"false"}

Dalej w androidzie przesyłam metodą POST login oraz hasło przy użyciu biblioteki Volley.

Mój problem polega na tym, że volley nie czeka na odpowiedź z serwera. Dopiero po paru kliknięciach przycisku Zaloguj dostajemy się do konta. 

Znalazłem coś takiego : Link

Lecz nadal mam ten sam problem  i nie wiem co robię źle.

Czy wie ktoś gdzie leży przyczyna takiego działania ?

Mój kod:



package com.example.mateusz.rentguide;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;


import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.Volley;
import com.example.mateusz.rentguide.model.SharedPrefManager;
import com.example.mateusz.rentguide.model.Url;
import com.example.mateusz.rentguide.model.User;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;




public class LoginActivity extends AppCompatActivity {

    EditText loginText, passwordText;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        if (SharedPrefManager.getInstance(this).isLoggedIn()) {
            finish();
            startActivity(new Intent(this, LoggedActivity.class));
        }






        //akcja po wcisnieciu przycisku button_sign
        //wywolanie metody userLogin()
        findViewById(R.id.button_sign).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                loginText = (EditText) findViewById(R.id.login);
                passwordText = (EditText) findViewById(R.id.password);


                final String login = loginText.getText().toString();
                final String password = passwordText.getText().toString();
                final String url=Url.getUrlWeb();


                Controller controller=new Controller();

                controller.userLogin(LoginActivity.this, url,login,password, new ServerCallBack() {
                    @Override
                    public void onSuccess(JSONObject result) {
                        try {
                            if(!result.getBoolean("error")){
                               startActivity(new Intent(getApplicationContext(), LoggedActivity.class));
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });
            }
        });



    }





}
package com.example.mateusz.rentguide;

import android.content.Context;
import android.text.TextUtils;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.Volley;
import com.example.mateusz.rentguide.model.Url;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;

/**
 * Created by mateusz on 09.11.2018.
 */

public class Controller {



   public void userLogin(final Context context, String url, final String login, final String password, final ServerCallBack callback) {







        HashMap<String, String> params = new HashMap<String, String>();
        params.put("login", login);
        params.put("password", password);






        RequestQueue requestQueue = Volley.newRequestQueue(context);



        CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST, url,params,new Response.Listener<JSONObject>() {


            @Override
            public void onResponse(JSONObject response) {
               callback.onSuccess(response);
            }


        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.e("Error: ", error.getMessage());
            }

        });


        requestQueue.add(jsObjRequest);
    }



}
package com.example.mateusz.rentguide;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * Created by mateusz on 09.11.2018.
 */


public interface ServerCallBack {
        void onSuccess(JSONObject result);
    }

package com.example.mateusz.rentguide;

import java.io.UnsupportedEncodingException;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

public class CustomRequest extends Request<JSONObject> {

    private Listener<JSONObject> listener;
    private Map<String, String> params;

    public CustomRequest(String url, Map<String, String> params,
                         Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    public CustomRequest(int method, String url, Map<String, String> params,
                         Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 11 listopada 2018 przez Mateusz Łuczak Nowicjusz (160 p.)

Dla potomnych :

Problem rozwiązany nie trzeba było nawet używać interfejsu

Wystarczyła jedna prosta linijka:

jsObjRequest.setShouldCache(false);

Podobne pytania

0 głosów
0 odpowiedzi 167 wizyt
pytanie zadane 21 listopada 2017 w Android, Swift, Symbian przez dziadek Początkujący (440 p.)
0 głosów
1 odpowiedź 447 wizyt
pytanie zadane 23 września 2018 w Java przez czmyk Obywatel (1,100 p.)
0 głosów
0 odpowiedzi 141 wizyt
pytanie zadane 31 marca 2018 w Java przez Karaś13 Nowicjusz (170 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...