2010-07-02 5 views
0

Началось кодирование простого приложения для Android. Часть из него затягивает пользователей за последние 20 твитов и сохраняет их в базе данных. Когда я запускаю это, statuses = twitter.getUserTimeline(), выдает исключение обработано и распечатывается: не удалось получить разрешение на временную шкалу. Когда я запускаю тот же код, что и не-андроид, он работает нормально. Я немного озадачен. Мог ли андроид ограничивать сетевое соединение? Я использую некоторые вспомогательные классы базы данных, не включили код, так как исключение, прежде чем любой из них даже участвуют: (Heres код:Ошибка исключения для Android Twitter :(

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); 
} 
} 

ответ

0

Похоже, вы не добавили разрешения android.permission.INTERNET в вашем AndroidManifest.xml.

+0

Спасибо, я добавил моему манифесту. Все еще получаю ту же проблему :( – drunkmonkey

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) { 


} 
} 

где андроид класс, который содержит код:

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();` 

Это сработало для меня. Удачи

+0

i, но любопытно узнать, что жетоны действительно должны быть жестко закодированы? – nobalG