package pl.project.promiseme;
import java.util.Date;
import java.util.List;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.OAuthAuthorization;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class SampleTwitAppActivity extends MainActivity {
public static final String TAG = "SampleTwitAppActivity";
TextView nameText;
Button connectBtn;
StatusListView statusList;
StatusListAdapter statusAdapter;
Button writeBtn;
EditText writeInput;
public void onCreate(Bundle twit) {
super.onCreate(twit);
setContentView(R.layout.twit_main);
connectBtn = (Button) findViewById(R.id.connectBtn);
connectBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
connect();
}
});
nameText = (TextView) findViewById(R.id.nameText);
statusList = (StatusListView) findViewById(R.id.statusList);
statusAdapter = new StatusListAdapter(this);
statusList.setAdapter(statusAdapter);
statusList.setOnDataSelectionListener(new OnDataSelectionListener() {
public void onDataSelected(AdapterView parent, View v, int position, long id) {
Status curItem = (Status) statusAdapter.getItem(position);
String curText = curItem.getText();
Toast.makeText(getApplicationContext(), "Selected : " + curText, 1000).show();
}
});
writeBtn = (Button) findViewById(R.id.writeBtn);
writeBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String statusText = writeInput.getText().toString();
if (statusText.length() < 1) {
Toast.makeText(getApplicationContext(), "얘야 먼가 치고 눌러야 하지 않겠니? ;D", 1000).show();
return;
}
updateStatus(statusText);
}
});
writeInput = (EditText) findViewById(R.id.writeInput);
}
private void updateStatus(String statusText) {
try {
Status status = BasicInfo.TwitInstance.updateStatus(statusText);
Date curDate = status.getCreatedAt();
Toast.makeText(getApplicationContext(), "갈아엎었어. 수공 :0" + BasicInfo.DateFormat.format(curDate), 1000).show();
showUserTimeline();
} catch(Exception ex) {
ex.printStackTrace();
}
}
private void connect() {
Log.d(TAG, "connect() called.");
if (BasicInfo.TwitLogin) {
Log.d(TAG, "twitter already logged in.");
Toast.makeText(getBaseContext(), "twitter already logged in.", Toast.LENGTH_LONG).show();
try {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthAccessToken(BasicInfo.TWIT_KEY_TOKEN);
builder.setOAuthAccessTokenSecret(BasicInfo.TWIT_KEY_TOKEN_SECRET);
builder.setOAuthConsumerKey(BasicInfo.TWIT_CONSUMER_KEY);
builder.setOAuthConsumerSecret(BasicInfo.TWIT_CONSUMER_SECRET);
Configuration config = builder.build();
TwitterFactory tFactory = new TwitterFactory(config);
BasicInfo.TwitInstance = tFactory.getInstance();
Toast.makeText(getBaseContext(), "twitter connected.", Toast.LENGTH_LONG).show();
} catch (Exception ex) {
ex.printStackTrace();
}
showUserTimeline();
} else {
try {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setDebugEnabled(true);
builder.setOAuthConsumerKey(BasicInfo.TWIT_CONSUMER_KEY);
builder.setOAuthConsumerSecret(BasicInfo.TWIT_CONSUMER_SECRET);
TwitterFactory factory = new TwitterFactory(builder.build());
Twitter mTwit = factory.getInstance();
RequestToken mRequestToken = mTwit.getOAuthRequestToken();
String outToken = mRequestToken.getToken();
String outTokenSecret = mRequestToken.getTokenSecret();
Log.d(TAG, "Request Token : " + outToken + ", " + outTokenSecret);
Log.d(TAG, "AuthorizationURL : " + mRequestToken.getAuthorizationURL());
BasicInfo.TwitInstance = mTwit;
BasicInfo.TwitRequestToken = mRequestToken;
Intent intent = new Intent(this, TwitLogin.class);
intent.putExtra("authUrl", mRequestToken.getAuthorizationURL());
startActivityForResult(intent, BasicInfo.REQ_CODE_TWIT_LOGIN);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent resultIntent) {
super.onActivityResult(requestCode, resultCode, resultIntent);
if (resultCode == RESULT_OK) {
if (requestCode == BasicInfo.REQ_CODE_TWIT_LOGIN) {
try {
Twitter mTwit = BasicInfo.TwitInstance;
AccessToken mAccessToken = mTwit.getOAuthAccessToken(BasicInfo.TwitRequestToken, resultIntent.getStringExtra("oauthVerifier"));
BasicInfo.TwitLogin = true;
BasicInfo.TWIT_KEY_TOKEN = mAccessToken.getToken();
BasicInfo.TWIT_KEY_TOKEN_SECRET = mAccessToken.getTokenSecret();
BasicInfo.TwitAccessToken = mAccessToken;
BasicInfo.TwitScreenName = mTwit.getScreenName();
Toast.makeText(getBaseContext(), "Twitter connection succeeded : " + BasicInfo.TWIT_KEY_TOKEN, Toast.LENGTH_LONG).show();
showUserTimeline();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
private void showUserTimeline() {
Log.d(TAG, "showUserTimeline() called.");
connectBtn.setVisibility(View.GONE);
nameText.setVisibility(View.VISIBLE);
nameText.setText(BasicInfo.TwitScreenName);
// get user timeline
getUserTimeline();
}
private void getUserTimeline() {
Twitter mTwit = BasicInfo.TwitInstance;
try {
List<Status> statuses = mTwit.getUserTimeline();
statusAdapter.setListItems(statuses);
statusAdapter.notifyDataSetChanged();
} catch(Exception ex) {
ex.printStackTrace();
}
}
protected void onPause() {
super.onPause();
saveProperties();
}
protected void onResume() {
super.onResume();
loadProperties();
}
private void saveProperties() {
SharedPreferences pref = getSharedPreferences("TWIT", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("TwitLogin", BasicInfo.TwitLogin);
editor.putString("TWIT_KEY_TOKEN", BasicInfo.TWIT_KEY_TOKEN);
editor.putString("TWIT_KEY_TOKEN_SECRET", BasicInfo.TWIT_KEY_TOKEN_SECRET);
editor.commit();
}
private void loadProperties() {
SharedPreferences pref = getSharedPreferences("TWIT", MODE_PRIVATE);
BasicInfo.TwitLogin = pref.getBoolean("TwitLogin", false);
BasicInfo.TWIT_KEY_TOKEN = pref.getString("TWIT_KEY_TOKEN", "");
BasicInfo.TWIT_KEY_TOKEN_SECRET = pref.getString("TWIT_KEY_TOKEN_SECRET", "");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
위에 .java는 만들어진 코드고요
manifest.xml을 최근에 고쳤어도....
fatal exception(main), unable to start componentInfo.. 이런문제가 생깁니다
스택 오버플로우일지도 모르는데 진짜 원인이 무엇인가요?
익셉션 스택을 좀더 보여 주셔야 겠네요.
소스는 보기 귀찮네요.