Java Android Twitter异常错误:(
开始编写一个简单的android应用程序。其中一部分会提取用户最近的20条推文并将其保存到数据库中。当我运行此程序时,status=twitter.getUserTimeline();抛出其已处理的异常并打印:未能获得时间线权限被拒绝。当我运行非android的同一代码时,它工作正常。我有点困惑。android可能会限制网络连接吗?我使用一些数据库帮助器类,没有包含代码,因为异常是在我使用这些类之前抛出的以下是代码:Java Android Twitter异常错误:(,java,android,twitter,twitter4j,Java,Android,Twitter,Twitter4j,开始编写一个简单的android应用程序。其中一部分会提取用户最近的20条推文并将其保存到数据库中。当我运行此程序时,status=twitter.getUserTimeline();抛出其已处理的异常并打印:未能获得时间线权限被拒绝。当我运行非android的同一代码时,它工作正常。我有点困惑。android可能会限制网络连接吗?我使用一些数据库帮助器类,没有包含代码,因为异常是在我使用这些类之前抛出的以下是代码: import twitter4j.Paging; import 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);
}
}
导入twitter4j.分页;
导入twitter4j.状态;
导入twitter4j.Twitter;
导入twitter4j.TwitterException;
导入twitter4j.TwitterFactory;
导入java.io.File;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Date;
导入android.app.ListActivity;
导入android.os.Bundle;
导入android.widget.ArrayAdapter;
公共类TwitterTest扩展了ListActivity{
私有ArrayList查询字符串;
私有数据库查询;
/*返回不带时间的字符串格式的日期*/
字符串getThisYearDate(日期d){
字符串x=d.toString();
字符串y=x.子字符串(0,11);
字符串z=x.子字符串(17);
字符串a=y.concat(z);
返回a;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
查询=新数据库查询(此);
/*如果文件存在,则成功创建数据库中的表*/
File File=新文件(“exists.txt”);
布尔成功=file.exists();
if(success==false){
试一试{
ArrayList status=新建ArrayList();
Twitter=new TwitterFactory().getInstance(“用户名”、“密码”);
status=twitter.getUserTimeline();
/*将状态数据添加到数据库*/
对于(状态s:状态){
appendData(“Text”,s.getText());
query.appendData(“Date”,this.getThisYearDate(s.getCreatedAt());
query.appendData(“ID”,String.valueOf(s.getId());
query.addRow();
}
}
捕获(twitter异常){
System.out.println(“未能获取时间线:+te.getMessage());
系统退出(-1);
}
试一试{
boolean created=file.createNewFile();
}
捕获(IOE异常){
System.out.println(“错误”);
}
queryString=query.getData(新字符串[]{“Text”},this.getThisYearDate(新日期()),null,null,Date,ASC);
试一试{
query.destroy();
}捕获(可丢弃的e){
e、 printStackTrace();
}
}否则{
//文件已存在
queryString=query.getData(新字符串[]{“Text”},this.getThisYearDate(新日期()),null,null,Date,ASC);
试一试{
query.destroy();
}捕获(可丢弃的e){
e、 printStackTrace();
}
}
//设置ListView
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,queryString));
getListView().setTextFilterEnabled(true);
}
}
听起来您好像没有将权限android.permission.INTERNET添加到您的AndroidManifest.xml中。使用异步任务,它对我有效
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) {
}
}
然后使用以下代码调用此异步任务:
Asy.msg = "whatever"; // the status I was posting
Asy task3 = new Asy();
task3.execute();`
这对我很有效。祝你好运谢谢,我把它添加到了我的清单中。不过还是遇到了同样的问题:(我提高了投票率,但好奇地想知道代币真的需要硬编码吗?
Asy.msg = "whatever"; // the status I was posting
Asy task3 = new Asy();
task3.execute();`