Android 使用asynctask时如何解决oauth问题?

Android 使用asynctask时如何解决oauth问题?,android,json,api,android-asynctask,Android,Json,Api,Android Asynctask,祝你今天愉快, 我在使用XeroAPI时遇到了一个问题,我将数据作为json对象放入服务器,但得到的结果是null。我调试它时说oauth_problem=consummer key未知,但我已经检查了我的密钥和密钥,这是真的。但当我运行应用程序时什么也没发生,我只需要把用户信息放到服务器上,但我不知道如何修复它。这件事花了我一个星期的时间,所以我真的需要你的帮助! 多谢各位~ 这是我的密码: public String PUT_CONTACT(String url, Contact c

祝你今天愉快, 我在使用XeroAPI时遇到了一个问题,我将数据作为json对象放入服务器,但得到的结果是null。我调试它时说oauth_problem=consummer key未知,但我已经检查了我的密钥和密钥,这是真的。但当我运行应用程序时什么也没发生,我只需要把用户信息放到服务器上,但我不知道如何修复它。这件事花了我一个星期的时间,所以我真的需要你的帮助! 多谢各位~ 这是我的密码:

    public String PUT_CONTACT(String url, Contact c){
    String oauth = "Basic " + Base64.encodeToString(
            (getString(R.string.api_key) + ":" +        
    getString(R.string.api_secret)).getBytes(),
            Base64.NO_WRAP);
    String kq=null;
    InputStream is;

    HttpClient httpClient = new DefaultHttpClient();

    HttpPut httpPut = new HttpPut(url);

    httpPut.addHeader("Authentication",oauth);

    String js ="";
    JSONObject ob = new JSONObject();
    try {
        ob.accumulate("Name",c.getName());
        ob.accumulate("Email",c.getEmail());
        ob.accumulate("Job",c.getJob());
    } catch (JSONException e) {
        e.printStackTrace();
    }

    js = ob.toString();

    try {
        StringEntity se = new StringEntity(js);

        httpPut.setEntity(se);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    httpPut.addHeader("Accept","application/json");
    httpPut.addHeader("Content-Type","application/json");

    try {
        HttpResponse response = httpClient.execute(httpPut);

        is = response.getEntity().getContent();

        if (is!=null){
            kq = convertInputStreamToString(is);
        }else {
            kq ="";
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return kq;
}
private static String convertInputStreamToString (InputStream is) throws IOException{
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line ="";
    String result ="";
    while ((line=reader.readLine())!=null){
        result+=line;
        is.close();
    }
    return  result;
}
class putContactToServer extends AsyncTask<String,Void,String>{

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

        return PUT_CONTACT(url[0],c);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Toast.makeText(ResponseActivity.this, "putted"+s, Toast.LENGTH_SHORT).show();
        rs.setText(s);
    }
}
publicstringput\u联系人(字符串url,联系人c){
字符串oauth=“Basic”+Base64.encodeToString(
(getString(R.string.api_key)+“:”+
getString(R.string.api_secret)).getBytes(),
Base64.无包装);
字符串kq=null;
输入流为;
HttpClient HttpClient=新的DefaultHttpClient();
HttpPut HttpPut=新的HttpPut(url);
addHeader(“身份验证”,oauth);
字符串js=”“;
JSONObject ob=新的JSONObject();
试一试{
ob.acculate(“Name”,c.getName());
ob.acculate(“Email”,c.getEmail());
ob.acculate(“Job”,c.getJob());
}捕获(JSONException e){
e、 printStackTrace();
}
js=ob.toString();
试一试{
StringEntity se=新的StringEntity(js);
httpPut.setEntity(se);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
addHeader(“接受”、“应用程序/json”);
addHeader(“内容类型”、“应用程序/json”);
试一试{
HttpResponse response=httpClient.execute(httpPut);
is=response.getEntity().getContent();
如果(is!=null){
kq=convertInputStreamToString(is);
}否则{
kq=“”;
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回kq;
}
私有静态字符串convertInputStreamToString(InputStream is)引发IOException{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
字符串行=”;
字符串结果=”;
而((line=reader.readLine())!=null){
结果+=行;
is.close();
}
返回结果;
}
类putContactToServer扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…url){
返回PUT_联系人(url[0],c);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
Toast.makeText(ResponseActivity.this,“putted”+s,Toast.LENGTH_SHORT.show();
rs.setText(s);
}
}

您从服务器收到的确切错误是什么?服务器向我响应结果为空,我调试了我的应用程序,它说oauth_problem=consummer key未知且未重新编码,但我已经在服务器上检查了我的consummer key和secret key,但这完全正确!请首先尝试使用postman或任何其他rest客户端运行API。如果它在那里工作,那么我们可以在这里找到解决方案。首先,您需要确保您提供的所有标题的格式正确。如果你愿意,你可以向我提供API细节,我会为你创建一个邮递员请求,并与你分享。如果没有确切的API要求,我无法帮助您。好的,那么您是否有facebook或skype来轻松帮助我,lol。以下是链接:ttps://api.xero.com/api.xro/2.0/contacts /消费密钥:49MTCD4KYGGGOF8J09BZG1JV3ZGT/消费密钥:NYBC7LRW9H1E5LFT2CWT3CBMVK5KF和链接