如何将每个AsyncTask类放在一个单独的文件中?

时间:2014-04-24 06:42:58

标签: java android android-asynctask

我有一些在我的主要活动中定义的asynstask。我试着通过将这些类中的每一个放在一个单独的文件中来使代码更加模块化。不幸的是,我不断收到一些错误,例如无法让意图发挥作用。如何将此代码与我的主要活动相关联。顺便说一句,如果我把这个代码原样(没有导入)放在mainActivity中它就可以了。感谢

package com.example.food4thought;

import java.net.URL;

import twitter4j.TwitterException;
import twitter4j.auth.RequestToken;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;



// Starts an intent that loads up a web browser and asks the user to log in to twitter
    // and get a pin#
    public  class TwitterLogin extends AsyncTask<URL, Integer, RequestToken>  {



        protected RequestToken doInBackground(URL... arg0) {

            try {
                requestToken = twitter.getOAuthRequestToken();
                Log.i("Got Request Token", "food4thought");
            } catch (TwitterException e) {
                Log.i("Failed to get Request Token", "food4thought");
            }

            //Log.i(requestToken.getAuthorizationURL(), "food4thought");
            //requestToken.getAuthorizationURL();
            //log_in.setText();

            try {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthorizationURL()));
            startActivity(browserIntent);
            }

            catch(NullPointerException e) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Unable to log in, No access to the Internet.", Toast.LENGTH_LONG).show();

                    }
                });

            }

            return null;
        }

    }

1 个答案:

答案 0 :(得分:1)

要做到这一点,您需要了解您的AsyncTask具有哪些依赖项。

要解雇您需要{1}}意图的意图。我还看到了一些Context变量。

因此,您需要声明适当的字段并将这些对象传递给您的TwitterLogin构造函数。

类似的东西:

twitter

稍后你可以解雇Intent:

public  class TwitterLogin extends AsyncTask<URL, Integer, RequestToken>  {
    private Context context;
    //other fields here

    public TwitterLogin(Context context, ...){ // other variables here
        this.context = context;
        //other fields assignment
    }
}

重要的是要理解所有像startActivity这样的方法都不是某些“全局函数”,而是它们是某些类实例的方法,你不能只从AsycTask实例中调用这些方法。