无法通过使用 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的主要内容,如果未能解决你的问题,请参考以下文章