put(String,long)找不到合适的方法怎么解决

How to solve no suitable method found for put(String,long)

有人可以帮我解决这个问题吗?我正在尝试使用下面的代码将数据从 android 发送到 MySQL,但我得到了 error long cannot converted to String。我可以找到很多与 no suitable method found .put(String) 相关的解决方案,但不是我的情况,所以我决定从这里寻求帮助。任何帮助将不胜感激。

 public void addWorkForce(final String subcontractors, final String noPeople, final String noHours,final long twf)
    {
        class AddWorkForce extends AsyncTask<String, Void, String> {
            ProgressDialog loading;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(WorkDetailsTable.this, "Please Wait",null, true, true);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
            }

            @Override
            protected String doInBackground(String... params) {

                HashMap<String, String> data = new HashMap<String,String>();
                data.put(Config.KEY_SUBCONTRACTORS,subcontractors);
                data.put(Config.KEY_NUMBERPERSONS,noPeople);
                data.put(Config.KEY_NUMBERHOURS,noHours);
                data.put(Config.KEY_TWF,twf);
                RequestHandler rh=new RequestHandler();
                String result = rh.sendPostRequest(Config.ADD_WORKFORCE,data);
                return  result;
            }
        }

        AddWorkForce ru = new AddWorkForce();
        ru.execute(subcontractors,noPeople,noHours,twf);
    }

错误

Error:(281, 21) error: no suitable method found for put(String,long)
method AbstractMap.put(String,String) is not applicable
(argument mismatch; long cannot be converted to String)
method HashMap.put(String,String) is not applicable
(argument mismatch; long cannot be converted to String)

使用

data.put(Config.KEY_TWF,String.valueOf(twf));

通过传递正确类型的参数。你的class只有那个方法有两个字符串作为参数,而你试图用一个字符串和一个长字符串来调用它。

要么将原始类型中的方法改为使用 long(这是个坏主意,因为这样做可能会破坏其他代码。

或者,添加一个接受 String 和 long as 参数的新方法。

或者:这样称呼它:

而不是

long l = 2L;
callMethod("String", l);

这样做

callMethod("String", String.valueOf(l));

您的 HashMap<String, String> 意味着它正在等待 String 键和 String 值。您可以使用以下方法将 HashMap 更改为 <String, Long> 或将 long 值转换为 String

String.valueOf(long);