0

シンプルな 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);
}
}
4

2 に答える 2

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

それは私のために働いた。幸運を

于 2013-06-16T15:48:24.410 に答える
0

AndroidManifest.xml に許可 android.permission.INTERNET を追加していないようです。

于 2010-07-02T12:44:29.573 に答える