【问题标题】:How to create http connection which handles automatically if client changes activity如果客户端更改活动,如何创建自动处理的http连接
【发布时间】:2017-04-04 15:51:58
【问题描述】:

我已经创建了登录应用程序,它是我本机应用程序构建过程的一部分。使用登录会话的端点很少。我得到登录端点的成功结果,但它没有将其会话转发到下一个活动。例如:如果用户登录成功,他可以在进一步的活动中访问其余功能。但是,当我尝试切换活动时,我得到“用户需要登录”。

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        jsonResponse = new LoginPOJO();

        // UserLogin Field
        etUserName = (EditText) findViewById(R.id.etUserName);
        // UserLogin Password
        etPassword = (EditText) findViewById(R.id.etPassword);
        // Login Button Image
        btnLogin = (ImageView) findViewById(R.id.btnLogin);
        btnLogin.setOnClickListener(this);
        // User SignUp Button Image
        ImageView btnSignUp = (ImageView) findViewById(R.id.btnSignUp);
        btnSignUp.setOnClickListener(this);
        // Forget Password Textbutton
        TextView frgtPassword = (TextView) findViewById(R.id.forgetpassword);
        frgtPassword.setOnClickListener(this);
        // Skip for now button
        final TextView skipfornow = (TextView) findViewById(R.id.skipnow);
        skipfornow.setOnClickListener(this);

       }
private void logIn(final String username, final String password) {
        final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage("Logging you in...");
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
        progressDialog.show();
        String UPLOAD_URL = "http://xxxxx-dev.elasticbeanstalk.com/api/v1/login";
        final StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        //Dismissing the progress dialog
                        progressDialog.dismiss();
                        // Getting the final Json Object
                        JSONObject parentObject;
                        try {
                            parentObject = new JSONObject(s);

                            LoginPOJO.setCode(parentObject.getString("code"));

                            // Getting the data from Data Json Object
                            JSONObject dataObject = parentObject.getJSONObject("data");

                            // Getting data from Geo object
                            JSONObject geoObject = dataObject.getJSONObject("geo");

                            // Getting data from businesses Array
                            JSONArray businessesArray = dataObject.getJSONArray("businesses");

                            // Getting data from Meta Object
                            JSONObject metaObject = parentObject.getJSONObject("meta");

                            startActivity(new Intent(MainActivity.this, PromotionsFeedActivity.class));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        //Showing toast message of the response
                        Log.i("TAG", "onResponse: " + s);

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        //Dismissing the progress dialog
                        progressDialog.dismiss();
                        //Showing snackbar
                        Toast.makeText(MainActivity.this, "Connection Problem", Toast.LENGTH_SHORT).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //Converting Bitmap to String
                //Creating parameters
                Map<String, String> params = new Hashtable<>();
                params.put("apikey", Utilities.API_KEY);
                params.put("secret", Utilities.SECRET_KEY);
                params.put("email", username);
                params.put("password",password);
                //Adding parameters
                //returning parameters
                return params;
            }
        };
        //Creating a Request Queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        //Adding request to the queue
        requestQueue.add(stringRequest);
    }

feed.java

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

        jsonResponse = new LoginPOJO();

        communityImage = (TextView) findViewById(R.id.communityImage);

        communityImage.setOnClickListener((View.OnClickListener) this);

        searchImage = (TextView) findViewById(R.id.searchImage);

        searchImage.setOnClickListener((View.OnClickListener) this);

        specialsImage = (TextView) findViewById(R.id.searchImage);

        specialsImage.setOnClickListener(this);

        calenderImage = (TextView) findViewById(R.id.calenderImage);

        calenderImage.setOnClickListener(this);

        profileImage = (TextView) findViewById(R.id.profileImage);

        profileImage.setOnClickListener(this);

        TextView response = (TextView) findViewById(R.id.response);

        String data = LoginPOJO.getCode();

        response.setText(data);

    }
private void getPromotionsFeed(final String location) {

        final ProgressDialog progressDialog = new ProgressDialog(PromotionsFeedActivity.this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage("Getting promotions feed...");
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
        progressDialog.show();
        String UPLOAD_URL = "http://xxxx-dev.elasticbeanstalk.com/api/v1/get_promotions_feed";
        final StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        //Dismissing the progress dialog
                        progressDialog.dismiss();
                        // Getting the final Json Object
                        JSONObject parentObject;
                        try {
                            parentObject = new JSONObject(s);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        //Showing toast message of the response
                        Log.i("TAG", "onResponse: " + s);

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        //Dismissing the progress dialog
                        progressDialog.dismiss();
                        //Showing snackbar
                        Toast.makeText(PromotionsFeedActivity.this, "Connection Problem", Toast.LENGTH_SHORT).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //Converting Bitmap to String
                //Creating parameters
                Map<String, String> params = new Hashtable<>();
                params.put("apikey", Utilities.API_KEY);
                params.put("secret", Utilities.SECRET_KEY);
                params.put("location","xxx");
                //Adding parameters
                //returning parameters
                return params;
            }
        };
        //Creating a Request Queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        //Adding request to the queue
        requestQueue.add(stringRequest);
    }

LogCat

04-03 18:47:26.263 10750-10750/com.example.reception.farbinder_test I/TAG: onResponse: {"code":200,"status":"ok","message":"Logged in.","data":{"id":"Pg4yYHXIQK","firstName":"Arun","lastName":"","shortName":"Arun","email":"arun@farbinder.com","role":"owner","showInviteMessage":false,"verified":true,"zipCode":"07666","location":"Teaneck, NJ","geo":{"latitude":40.888461,"longitude":-74.012066,"zipcode":"07666","city":"Teaneck","state":"NJ","type":"geo"},"defaultCommunity":{"id":18313,"name":"Teaneck, NJ Community","city":"Teaneck","state":"NJ","latitude":40.888461,"longitude":-74.012066,"type":"community"},"businesses":[{"id":72,"name":"my bus","type":"business"}],"type":"user"},"meta":{"userVideoUrl":"https://d1e6yi6s3cx2ur.cloudfront.net/videos/0/_20160316_ios-user.m4v","businessVideoUrl":"https://d1e6yi6s3cx2ur.cloudfront.net/videos/0/_20160316_ios-business.m4v","promoVideoUrl":"https://d1e6yi6s3cx2ur.cloudfront.net/videos/0/_20160316_ios-user.m4v","searchVideoUrl":"https://d1e6yi6s3cx2ur.cloudfront.net/videos/0/_20160316_ios-user.m4v","faqUrl":"http://farbinder-dev.elasticbeanstalk.com/api/v1/faq","privacyUrl":"http://farbinder-dev.elasticbeanstalk.com/api/v1/privacy","termsUrl":"http://farbinder-dev.elasticbeanstalk.com/api/v1/terms","contactFormUrl":"http://farbinder-dev.elasticbeanstalk.com/api/v1/contact?u\u003d25fee27e9d18464eadbad0faa632a9b6e82787cc613ca64e","feedbackFormUrl":"http://farbinder-dev.elasticbeanstalk.com/api/v1/feedback?u\u003d25fee27e9d18464eadbad0faa632a9b6e82787cc613ca64e","type":"links"}}
04-03 18:47:26.265 1518-1877/system_process W/InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@2ddf4f6b attribute=null, token = android.os.BinderProxy@330c1b98
04-03 18:47:26.326 1518-1660/system_process V/WindowManager: Adding window Window{11f00761 u0 com.example.reception.farbinder_test/com.example.reception.farbinder_test.PromotionsFeedActivity} at 4 of 10 (after Window{27eec5b0 u0 com.example.reception.farbinder_test/com.example.reception.farbinder_test.MainActivity EXITING})
04-03 18:47:26.330 1518-1880/system_process V/WindowManager: Adding window Window{1217747 u0 com.example.reception.farbinder_test/com.example.reception.farbinder_test.PromotionsFeedActivity} at 4 of 11 (before Window{11f00761 u0 com.example.reception.farbinder_test/com.example.reception.farbinder_test.PromotionsFeedActivity})
04-03 18:47:26.441 10750-10750/com.example.reception.farbinder_test E/RecyclerView: No adapter attached; skipping layout
04-03 18:47:26.457 1162-1162/? W/SurfaceFlinger: couldn't log to binary event log: overflow.
04-03 18:47:27.092 10750-10750/com.example.reception.farbinder_test I/TAG: onResponse: {"code":401,"status":"error","message":"User not logged in."}

【问题讨论】:

    标签: java android web-services android-layout android-webservice


    【解决方案1】:

    您在服务中登录,然后让服务将成功登录广播到任何感兴趣的课程。

    【讨论】:

    • 所以根据你的说法,我必须正确地解析成功登录到感兴趣的课程。但是端点的其余部分不会将这些凭据作为参数。我怎么能把成功的消息发送给感兴趣的班级。你能用一些示例代码解释一下吗? @Gabe Sechan
    • 查看广播接收器。或事件总线。或者一个 RxJava observable。或者只是一个绑定服务,带有你自己的回调系统。有几十种方法可以提醒服务中的活动,做一些研究。
    • 哦,好吧..谢谢@Gabe Sechan
    • 我仍然面临同样的问题。实际上我正在尝试点击给出响应的登录端点。尝试获取另一个端点的配置文件信息,但它仍然显示相同的错误用户未登录。这意味着端点正在寻找登录会话。@Gabe Sechan
    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2021-05-02
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多