如何在onclick方法上使用jwt头来访问api?

yr9zkbsy  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(220)

开发人员希望一切都很好,我陷入了从onclick方法命中api的url的问题。我想发送头中的jwt令牌和点击布局时的id值。api接受头和id参数。我无法做到这一点,因为我是一个非常新的编程世界任何帮助你的人必须非常感谢:下面是我的功能代码:

profile.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                String str = taginput.getText().toString();
                tag_id = taginput.getText().toString();
                    session = new SessionManager(getApplicationContext());
          //I want to send these two things to the next activity JWT to haders and id to hit api   
                    token = session.getStringData("jwtToken");
                    id = session.getStringData("mtagid");
                if(!str.isEmpty()) {

                    session = new SessionManager(getApplicationContext());
                    token = session.getStringData("jwtToken");
                    tag_id = session.getStringData("tagid");

                    Intent intent = new Intent(getApplicationContext(), CInfo.class);
                    startActivity(intent);
                }
                else {
                    Toast.makeText(getApplicationContext(),
                            "Please Enter CNIC first!", Toast.LENGTH_LONG)
                            .show();
                }

            }
        });

下面给出了编写api调用和所有功能的类:

public class CInfo extends AppCompatActivity {
    private String TAG = CInfo.class.getSimpleName();
    private ProgressDialog pDialog;
    private static final int MY_SOCKET_TIMEOUT_MS = 50000;
    ListView listView;
    List<ConstantClass> constantClassList;

    ProgressBar progressBar;
    private RequestQueue mRequestQueue;
    private SessionManager session;
    String token;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c_info);
        Bundle extras = getIntent().getExtras();
        listView=(ListView)findViewById(R.id.listView);
        progressBar=(ProgressBar)findViewById(R.id.progress);
        pDialog = new ProgressDialog(this);
        pDialog.setCancelable(false);
        constantClassList=new ArrayList<>();

        sendAndRequestResponse();

        session = new SessionManager(getApplicationContext());
        token = session.getStringData("jwtToken");

    }

    private void sendAndRequestResponse() {

        mRequestQueue= Volley.newRequestQueue(this);

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest ( Request.Method.POST, AppConfig.URL_CARS_INFO+DemoClass.tag_id, null, new Response.Listener<JSONObject> () {

            @Override
            public void onResponse(JSONObject response) {

                try {
                    JSONArray jsonArray = response.getJSONArray ( "result" );

                    for (int i = 0; i < jsonArray.length (); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject ( i );

                        String ownername = jsonObject.getString ( "ownername" );

                        String tokenno = jsonObject.getString ( "tokenno" );
                        String registration = jsonObject.getString ( "registration" );
                        String cnic = jsonObject.getString("cnic");
                        String balance = jsonObject.getString("balance");
                        String veh_type = jsonObject.getString("veh_type");

                        ConstantClass constantClass=new ConstantClass(ownername,tokenno,registration,cnic,balance,veh_type);
                        constantClassList.add(constantClass);

                    }
                    CustomAdapter customAdapter=new CustomAdapter(CInfo.this,constantClassList);
                    listView.setAdapter(customAdapter);
                } catch (JSONException e) {
                    e.printStackTrace ();

                }

            }

        }, new Response.ErrorListener () {
            @Override
            public void onErrorResponse(VolleyError error) {
                if (error.networkResponse == null) {
                    if (error.getClass().equals(TimeoutError.class)) {
                        // Show timeout error message
                        Toast.makeText(CInfo.this,
                                "Oops. Timeout error!",
                                Toast.LENGTH_LONG).show();
                    }
                }

            }

        }

        )
        {

            @Override
            protected Map<String, String> getParams() {
                // Posting parameters to login url
                Map<String, String> params = new HashMap<String, String>();
                params.put("tagid", DemoClass.mtag_id);
                //params.put("password", password);

                return params;
            }

            @Override
            public Map<String, String> getHeaders() {
                Map<String, String> params = new HashMap<String, String>();

                params.put("Authorization", token);
                Log.d(TAG,"Tokkenn0"+token);
                return params;
            }

        };

        mRequestQueue.addRequestFinishedListener(new RequestQueue.RequestFinishedListener<String>() {
            @Override
            public void onRequestFinished(Request<String> request) {

                progressBar.setVisibility(View.GONE);

            }

        });
        mRequestQueue.add (jsonObjectRequest);
        jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
                MY_SOCKET_TIMEOUT_MS,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

        //mRequestQueue = Volley.newRequestQueue ( CInfo.this );

    }
}
zxlwwiss

zxlwwiss1#

我认为你的问题在于:

sendAndRequestResponse();
session = new SessionManager(getApplicationContext());
token = session.getStringData("jwtToken");

应该是:

session = new SessionManager(getApplicationContext());
token = session.getStringData("jwtToken");
sendAndRequestResponse();

否则你只会设置 token 这是我们需要的 sendAndRequestResponse() 调用该方法之后,就太晚了。
还要确保您在清单中声明了此权限:

<uses-permission android:name="android.permission.INTERNET" />

相关问题