无法通过使用 Volley 库中的 Intent 从片段中移动下一个 Activity

Posted

技术标签:

【中文标题】无法通过使用 Volley 库中的 Intent 从片段中移动下一个 Activity【英文标题】:Unable to move on next Activity from fragment by using Intent in Volley Library 【发布时间】:2017-11-19 05:33:54 【问题描述】:

我正在尝试使用 volley 库登录。我使用 SharedPrefrences 来存储用户名、电子邮件、手机。当我使用正确的手机号码时。和密码。 Toast 正在生成登录成功,但无法将登录片段移动到仪表板活动。

这是登录方法的代码

private void login(String login_url, final String getLoginMob, final String getLoginPwd) 

    //Progress Dialog code
    final Dialog dialog =new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.loading_dialog);
    dialog.setCancelable(false);
    dialog.show();

    RequestQueue queue = Volley.newRequestQueue(getActivity());
    StringRequest postrequest = new StringRequest(Request.Method.POST, login_url, new Response.Listener<String>() 


        @Override
        public void onResponse(String response) 
            dialog.dismiss();

            try 
                JSONObject jsonObject = new JSONObject(response);

                if (jsonObject.getBoolean("success") == true ) 
                    Toast.makeText(getActivity(),jsonObject.getString("message"),Toast.LENGTH_LONG).show();

                    JSONObject jsonObjectInfo=jsonObject.getJSONObject("User");
                    sharedPrefrence_main.setName(jsonObjectInfo.getString("name"));
                    sharedPrefrence_main.setEmail(jsonObjectInfo.getString("email"));
                    sharedPrefrence_main.setMobile_no(jsonObjectInfo.getString("mobile"));

                    Intent intent=new Intent(getActivity(), Dashboard.class);
                    startActivity(intent);


                 else if (jsonObject.getBoolean("success") == false) 
                    Toast.makeText(getActivity(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
                
                else
                    Toast.makeText(getActivity(),"Entries are wrong",Toast.LENGTH_LONG).show();


             catch (JSONException e) 
                e.printStackTrace();
            
        
    , new Response.ErrorListener() 
        @Override
        public void onErrorResponse(VolleyError error) 
            error.printStackTrace();
            dialog.dismiss();
        
    )
        @Override
        protected Map<String, String> getParams()
            Map<String,String> param=new HashMap<String, String>();
            param.put("mobile_email", getLoginMob);
            param.put("password", getLoginPwd);
            return param;

        
    ;

    int socketTimeout = 30000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    postrequest.setRetryPolicy(policy);
    queue.add(postrequest);


JSON 响应

"success":"true","message":"登录成功","User":["name":"satishkanaujiya","email":"*****@gmail.com" ,"手机":"901589****"]

【问题讨论】:

你应该使用 getActivity().startActivity(intent) @Sandeepdhiman 我试过但没有帮助。 【参考方案1】:
  runOnUiThread(new Runnable() 
        @Override
        public void run() 
            //Type your Intent code here
        
    );

使用 LocalBraodcastManager: 使用此链接:how to use LocalBroadcastManager?

【讨论】:

【参考方案2】:

这是一个数组,我将其视为对象。最后我通过以下代码纠正了我的错误。

                JSONArray jsonArrays=jsonObject.getJSONArray("User");
                for(int i=0;i<jsonArrays.length();i++)
                 JSONObject jsonObject1=jsonArrays.getJSONObject(i);
                    sharedPrefrence_main.setName(jsonObject1.getString("name"));
                    sharedPrefrence_main.setEmail(jsonObject1.getString("email"));
                    sharedPrefrence_main.setMobile_no(jsonObject1.getString("mobile"));

                

【讨论】:

以上是关于无法通过使用 Volley 库中的 Intent 从片段中移动下一个 Activity的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Volley 进行 SSL 固定

Activity 在使用 volley 时泄漏了窗口

Volley 库中是不是有任何限制来获取 Android 上的数据数量?

解决Volley中的JsonObjectRequest jsonRequest参数无法被服务端读取的问题

Android 无法使用 Volley 库访问 URL

Android 无法使用 Volley 库访问 URL