2013-11-19 8 views
0

Я пытаюсь интегрировать твиттер в android.I вошел в твиттер в качестве пользователя синтаксического анализа, но не могу обновить свой статус, так как теперь я получаю запрещенную ошибку 403. Что может быть причиной 403 ошибка и как ее исправить? Любая помощь будет признателен .. Мой кодОбновление статуса на twitter в android

public void twitterbtnClick(View v) 
{ 
    ParseTwitterUtils.logIn(this, new LogInCallback() { 
     @Override 
     public void done(ParseUser arg0, com.parse.ParseException arg1) { 
      // TODO Auto-generated method stub 
      if (arg0 == null) { 
        Log.d("MyApp", "Uh oh. The user cancelled the Twitter login."); 
       } else if (arg0.isNew()) { 
        Log.d("MyApp", "User signed up and logged in through Twitter!"); 
        TweetsTask task = new TweetsTask(); 
        task.execute("Hi buddies"); 
       } else { 
        Log.d("MyApp", "User logged in through Twitter!"); 
        TweetsTask task = new TweetsTask(); 
        task.execute("Hi buddies"); 
       } 
     } 
     }); 

} 
public class TweetsTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     Log.d("Parameter",""+params[0]); 


     HttpClient client =new DefaultHttpClient(); 
     String status = params[0]; 
     Log.d("Status",""+status); 
     List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 
     parameters.add(new BasicNameValuePair("mystring", status)); 
     Log.d("Parameter2",""+status); 
     HttpPost httppost = new HttpPost("https://api.twitter.com/1.1/statuses/update.json"); 
     try { 
      httppost.setEntity(new UrlEncodedFormEntity(parameters)); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     ParseTwitterUtils.getTwitter().signRequest(httppost); 
     try { 
      HttpResponse response = client.execute(httppost); 
      if(response==null){ 
       task="fail"; 

      }else{ 
       task="success"; 

      } 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return task; 
    } 

} 
protected void onPostExecute(String result) { 
    if(task.equals("success")) 
    { 
     Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_SHORT).show(); 
    }else{ 
     Toast.makeText(getApplicationContext()," error",Toast.LENGTH_SHORT).show(); 
    } 
    } 
+1

Где мой код? Где ваша ошибка? – GrIsHu

+0

Не работали с андроидом, но используете ли вы учетные данные Twitter Developer, которые позволяют читать, писать и получать доступ? (По умолчанию кредиты только для чтения.) – arilaan

+0

@arilaan im, используя parse.com для входа в twitter и заданного типа доступа, как чтение, запись и доступ к прямым сообщениям в типе приложения – user2853201

ответ

0

не имеют достаточно высокую репутацию прокомментировать вопрос user2853201, но глядя на код. Параметр NameValuePair «mystring» в коде должен быть изменен на «status». И из документации twitter ошибка «403» возникает, когда вы пытаетесь отправить дубликат твита.

Вот как я отправил твит с помощью Анализировать:

Это метод OnClickListener() для моей кнопки твиттере:

 btnTwitter.setOnClickListener(new OnClickListener(){ 
      public void onClick(View arg0) { 
      ShareViaTwitter(); 

      } 
     }); 

Метод ShareViaTwitter():

private void displayShareTwitter(){ 

ParseTwitterUtils.logIn(this, new LogInCallback() { 

    @Override 
    public void done(ParseUser user, ParseException arg1) { 
     // TODO Auto-generated method stub 
      if (user == null) { 
        Log.d("MyApp", "Uh oh. The user cancelled the Twitter login."); 
       } else if (user.isNew()) { 
        Log.d("MyApp", "User signed up and logged in through Twitter!"); 
        new sendTweet().execute("your twitter status update"); 
       } else { 
        Log.d("MyApp", "User logged in through Twitter!"); 
        new sendTweet().execute("your twitter status update"); 
       } 

    } 
    }); 


    } 

sendTweet внутренний класс:

class sendTweet extends AsyncTask<String, Void, String> { 

    boolean success = true; 
    @Override 
    protected String doInBackground(String... params) { 
     try { 
      HttpClient client = new DefaultHttpClient(); 
      String status = params[0]; 
      List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 
      //This is where you add all the parameters you need for your tweet, 
      //see "https://dev.twitter.com/docs/api/1/post/statuses/update" 
      //for all the optional parameters you can add here 
      parameters.add(new BasicNameValuePair("status", status)); 
      HttpPost httppost = new HttpPost("https://api.twitter.com/1.1/statuses/update.json"); //API used here 1.1 
      try { 
       httppost.setEntity(new UrlEncodedFormEntity(parameters)); 
      } catch (UnsupportedEncodingException e) { 
       success = false; 
        e.printStackTrace(); 
      } 

      ParseTwitterUtils.getTwitter().signRequest(httppost);//This seems to cause the app to ask for authorization each time I tweet 
      HttpResponse response = client.execute(httppost);    
     } catch (Exception e) { 
      success = false; 
      e.printStackTrace(); 
     } 
     return null; 
    } 

protected void onPostExecute(String result) { 

    if (success){ 
     Toast.makeText(getApplicationContext(),"sent tweet",Toast.LENGTH_SHORT).show(); 
    }else{ 
     Toast.makeText(getApplicationContext(),"tweet failed",Toast.LENGTH_SHORT).show(); 
    } 


    } 

}

Смежные вопросы