2014-04-24 1 views
0

나는 나의 주요 활동의 내부에서 정의 된 몇 가지 asynstask를 가지고있다. 나는이 클래스들을 각각 별도의 파일에 넣음으로써 더 모듈화 된 코드를 만들려고했다. 불행히도 나는 일하는 의도를 갖지 못하는 것과 같은 몇 가지 오류가 계속 발생합니다. 이 코드를 주요 활동과 어떻게 연결합니까? 그건 그렇고 내가 mainActivity에서 (수입없이)이 코드를 배치하면 잘 작동합니다. 감사합니다.각 AsyncTask 클래스를 별도의 파일로 저장하는 방법은 무엇입니까?

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; 
     } 

    } 
+0

문제를 해결하기 위해 "일부 오류"부분을 추가 할 수 있습니까? –

+0

또한 컴파일 오류에주의하십시오. 진행 상황을 이해하면 오류를 해결할 수 있습니다. –

답변

1

이렇게하려면 AsyncTask의 종속성을 이해해야합니다.

의도를 실행하려면 Context intance가 필요합니다. 나 또한 어떤 twitter 변수를 참조하십시오.

그래서 적절한 필드를 선언하고 해당 객체를 TwitterLogin 생성자에 전달해야합니다. 그런

뭔가 :

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 
    } 
} 

나중에 당신이 의도 해고 할 수는 : 이해하는 것이 중요합니다 무엇

context.startActivity(browserIntent); 

오히려 그들이, startActivity를 같은 모든 방법이 몇 가지 "전역 함수"가 아니라는 것이다 일부 클래스 인스턴스의 메서드를 호출하고 AsycTask 인스턴스에서 이러한 메서드를 호출 할 수 없습니다.

관련 문제