Pregunta

Iniciado codificación de una sencilla aplicación para Android. En parte se tira de los usuarios últimos 20 tweets y los guarda en una base de datos. Cuando funciono esto, estados = twitter.getUserTimeline (); emite una excepción de su manipulados e imprime: No se pudo obtener la línea de tiempo-permiso denegado. Cuando ejecuto el mismo código no androide, que trabaja muy bien. Estoy un poco desconcertado. Androide podría ser limitar la conexión de red? Im usar algunas clases de ayuda de bases de datos, no se han incluido en el código debido a que la excepción se produce antes que cualquiera de éstos incluso participan: (Aquí está el código:

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);
}
}
¿Fue útil?

Solución

Parece que tienes no se añade el permiso android.permission.INTERNET en su AndroidManifest.xml.

Otros consejos

Uso tarea asincrónica, Funcionó para mí

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


}
}

donde androide es una clase que contiene su código:

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

}

a continuación, llamar a esta tarea asincrónica utilizando este código:

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

Se trabajó para mí. Buena suerte

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top