【问题标题】:Android Twitter exception error :(Android Twitter异常错误:(
【发布时间】:2011-03-11 01:58:48
【问题描述】:

开始编写一个简单的 Android 应用程序。其中一部分是提取用户最后 20 条推文并将它们保存到数据库中。当我运行它时, statuses = twitter.getUserTimeline();抛出一个异常处理并打印出来:未能获得时间线权限被拒绝。当我在非 android 上运行相同的代码时,它工作正常。我有点困惑。 android会限制网络连接吗?我使用了一些数据库助手类,没有包含代码,因为在涉及任何这些之前抛出异常:(这里是代码:

import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;


import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class  TwitterTest extends ListActivity{
 private ArrayList<String> queryString;
 private DatabaseQuery query;






 /* returns date in string format-without time */
 String getThisYearDate(Date d){
  String x = d.toString();
  String y= x.substring(0, 11);
  String z =x.substring(17);
  String a = y.concat(z);
  return a;
 }

 @Override
 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  query = new DatabaseQuery(this);

  /*If file exists then tables in db created successfully*/

  File file = new File("exists.txt");




  boolean success = file.exists();

  if (success==false) {
   try {

    ArrayList<Status> statuses = new ArrayList<Status>();


    Twitter twitter = new TwitterFactory().getInstance("USERNAME", "PASSWORD");



    statuses = twitter.getUserTimeline();

    /* adds status data to database*/
    for(Status s: statuses){

     query.appendData("Text", s.getText());
     query.appendData("Date", this.getThisYearDate(s.getCreatedAt()));
     query.appendData("ID",String.valueOf(s.getId()) );
     query.addRow();
    }



   }
   catch (TwitterException te) {
    System.out.println("Failed to get timeline: " + te.getMessage());

    System.exit( -1);
   }
   try{
    boolean created = file.createNewFile();
   }
   catch (IOException e) {

    System.out.println("error");




   }

   queryString = query.getData(new String[] {"Text"},this.getThisYearDate(new Date()), null, null, null, "Date", " ASC");
   try {
    query.destroy();
   } catch (Throwable e) {
    e.printStackTrace();
   }

  } else {
   // File already exists
   queryString = query.getData(new String[] {"Text"},this.getThisYearDate(new Date()), null, null, null, "Date", " ASC");
   try {
    query.destroy();
   } catch (Throwable e) {
    e.printStackTrace();
   }

  }





 // Set the ListView
 setListAdapter(new ArrayAdapter<String>(this,
   android.R.layout.simple_list_item_1, queryString));
 getListView().setTextFilterEnabled(true);
}
}

【问题讨论】:

    标签: java android twitter twitter4j


    【解决方案1】:

    使用异步任务,它对我有用

    public class Asy  extends AsyncTask<String, String, String> { 
    static String msg ;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    
    }
    
    
    protected String doInBackground(String... args) {
    
       android.tweet(msg);
        return null;
    }
    
    
    protected void onPostExecute(String file_url) {
    
    
    }
    }
    

    其中 android 是一个包含您的代码的类:

    public class android {
    static boolean got = true;
    public static String consumerKey = "************";
    
    public static String consumerSecret = "***********";
    
    public final static String accesstoken = "***************";
    
    public final static String accesstokensecret = "**************";
    
    private final String CALLBACKURL = "T4J_OAuth://callback_main";
    
    public static void tweet(String s) {
    
        ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.setOAuthAccessToken(accesstoken);
        builder.setOAuthAccessTokenSecret(accesstokensecret);
        builder.setOAuthConsumerKey(consumerKey);
        builder.setOAuthConsumerSecret(consumerSecret);
        OAuthAuthorization auth = new OAuthAuthorization(builder.build());
        Twitter twitter = new TwitterFactory().getInstance(auth);
    
        try {
    twitter.updateStatus(s);       //I was trying to tweet
            //put whatever you want to do
        } catch (TwitterException e) {
    
            return;
        }
    
    }
    

    然后使用此代码调用此异步任务:

    Asy.msg = "whatever";      // the status I was posting
    Asy task3 = new Asy();
    task3.execute();`
    

    它对我有用。祝你好运

    【讨论】:

    • 我投了赞成票,但很想知道令牌真的需要硬编码吗?
    【解决方案2】:

    听起来您还没有将权限 android.permission.INTERNET 添加到您的 AndroidManifest.xml 中。

    【讨论】:

    • 谢谢,我在清单中添加了 。仍然遇到同样的问题:(
    猜你喜欢
    • 2015-11-09
    • 2012-09-02
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多