2013-02-17 2 views
0

Представьтесь, чтобы выполнить анимированные задачи api и async. Я пытался использовать OAuth, используя jTwitter, который, кажется, простой API. Поскольку вы не можете выполнять сетевые операции в основном потоке. Я создал асинтез для работы. Это бросает мне исключения, которые я не понимаю. Пожалуйста, помогите мне разрешить исключения.Авторизация с помощью jTwitter android

Вот код

Twitter twitter = null; 
private EditText tweetTxt = null; 
private Button postBtn = null; 

private OAuthSignpostClient client = null; 
private String CALLBACK_URI = "myapp://twitt"; 

private String authUrl = null; 
private ProgressDialog postDialog = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    postBtn=(Button)findViewById(R.id.button1); 




    postBtn.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      new MyTask().execute(); 

     } 
    }); 


} 

private class MyTask extends AsyncTask<Void, Void, Void> { 


    protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), "pre execute", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     client = new OAuthSignpostClient("" ,"", CALLBACK_URI); 

     authUrl = client.authorizeUrl().toString(); 
     getApplicationContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

    } 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

protected void onNewIntent(Intent intent) { 

    super.onNewIntent(intent); 
    Uri uri = intent.getData(); 
    //Check if you got NewIntent event due to Twitter Call back only 
    if (uri != null && uri.toString().startsWith(CALLBACK_URI)) 
    { 
    try 
    { 
    String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); 
    client.setAuthorizationCode(verifier); 
    } 
    catch(Exception e){ 
    Log.d("exception", e.getMessage()); 
    } 
    }} 

и исключения, которые я получаю

02-17 10:58:54.751: E/AndroidRuntime(987): FATAL EXCEPTION: AsyncTask #1 
    02-17 10:58:54.751: E/AndroidRuntime(987): java.lang.RuntimeException: An error occured while executing doInBackground() 
    02-17 10:58:54.751: E/AndroidRuntime(987): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at java.lang.Thread.run(Thread.java:856) 
    02-17 10:58:54.751: E/AndroidRuntime(987): Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
    02-17 10:58:54.751: E/AndroidRuntime(987): at android.app.ContextImpl.startActivity(ContextImpl.java:886) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at android.app.ContextImpl.startActivity(ContextImpl.java:880) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at android.content.ContextWrapper.startActivity(ContextWrapper.java:276) 
    02-17 10:58:54.751: E/AndroidRuntime(987): at com.example.retrieve.contacts.twitter.MainActivity$MyTask.doInBackground(MainActivity.java:72) 

ответ

0

doInBackground() метод не предназначен для выполнения любых задач пользовательского интерфейса. Вы должны использовать для этого onPostExecute(). Если вам нужно показать Toast в doInBackground(), поместите его в Runnable(), как показано в коде.

Runnable run = new Runnable() { 

    @Override 
    public void run() { 

     // SHOW A TOAST 
     Toast.makeText(getApplicationContext(), "background stuff", Toast.LENGTH_LONG).show();       
    } 
}; MainActivity.this.runOnUiThread(run); 
+0

Как вы сказали, я удалил Toast из doInBackground(). Все еще получаются исключения. что-то связанное с началом деятельности извне. Изменили и добавили новые исключения. – dnivra

+0

Не является ли сообщение об ошибке само собой разумеющимся? Я все еще не понимаю, как использовать 'AsyncTask' для запуска кода, который вы есть. Вы не выполняете ресурсоемкую задачу, вызывая 'startActivity()' для намерения. Просто поместите его в 'postBtn.setOnClickListener'. –

+0

вопрос разрешен. Большое спасибо. – dnivra

Смежные вопросы