2013-07-28 32 views
1

Activity(SignInActivity)正在調用FunkcjeAPI中的方法,該方法執行AsyncTaskAndroid - 如何獲得致電活動?

我的AsyncTask應顯示ProgressDialog使用呼叫Activity。我不知道如何給構造函數一個正確的Activity。我嘗試了很多東西,閱讀了很多關於SO的教程和問題,但我找不到解決方案。 FunkcjeAPI不是一個活動,所以我不能寫new Logowanie(this).execute(argumenty);


AsyncTask調用代碼:

public class FunkcjeAPI { 

    static String dozwrotu = null; 

public static String zalogujSie(final String nick, final String haslo) 
{ 
    String[] argumenty = {nick, haslo}; 
    new Logowanie(/* WHAT HERE ? */).execute(argumenty); // HELP ME IN THAT LINE !!!!!!!!!!!!! 
    return dozwrotu; 


} 

AsyncTask類代碼(它是在FunkcjeAPI類):

private class Logowanie extends AsyncTask<String, Void, String> 
    { 

     Activity wywolujaceActivity; 

     public Logowanie(Activity wywolujaceActivity) { 
      this.wywolujaceActivity = wywolujaceActivity; 
     } 

     @SuppressWarnings("deprecation") 
     @Override 
     protected void onPreExecute() { 
      wywolujaceActivity.showDialog(SignInActivit.PLEASE_WAIT_DIALOG); 
     } 

     @Override 
     protected String doInBackground(final String... argi) { 
      final JSONParser jParser = new JSONParser(); 
      new Thread(new Runnable() { 
      public void run() {  
      final String json = jParser.getJSONFromUrl("http://tymonradzik.pl/THUNDER_HUNTER/thapi.php?q=login&username=" + argi[0] + "&password=" + argi[1] + "&imei="); 
      Handler mainHandler = new Handler(Looper.getMainLooper()); 
      mainHandler.post(new Runnable() { 

       @Override 
       public void run() { 
        JSONObject jObject; 
        try { 

         jObject = new JSONObject(json); 
         Log.wtf("Link", "http://tymonradzik.pl/THUNDER_HUNTER/thapi.php?q=login&username=" + argi[0] + "&password=" + argi[1] + "&imei="); 
         Log.wtf("Link", json); 
         String error = jObject.getString("error"); 
         if(error == "You reached daily query limit !") { nadajWartosc("You reached daily query limit !"); } 
         if(error == "0") {nadajWartosc(jObject.getString("token"));} 
         if(error == "1") {nadajWartosc("1");} 
         if(error == "Invalid username") {nadajWartosc("Invalid username");} 
         if(error == "Invalid password") {nadajWartosc("Invalid password");} 
         if(error == "This user is already logged in !") {nadajWartosc("This user is already logged in !");} 
        } catch (JSONException e1) { 
         e1.printStackTrace(); 
        } 
        catch (NullPointerException e) 
        { 
         e.printStackTrace(); 
        } 

       } 

      }); 
       }}).start(); 
      return dozwrotu; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      wywolujaceActivity.removeDialog(SignInActivit.PLEASE_WAIT_DIALOG); 

     } 


    } 
+1

可以使用getApplicationContext() –

+0

@TomerMor我寫的'Context.getApplicationContext()',但隨後我看到編譯器錯誤 – TN888

回答

1

zalogujSie()方法中添加一個參數Activity,然後使用此參數星號T中的AsyncTask:

public static String zalogujSie(Activity activity, final String nick, final String haslo) 
{ 
    // ..... 
    new Logowanie(activity).execute(argumenty); 
    return dozwrotu; 
} 

那麼你會調用這個方法從活動是這樣的:

FunkcjeAPI.zalogujSie(this, "Nick", "Haslo"); 
+0

它不起作用:我看到錯誤'沒有可以訪問類型FunkcjeAPI的封閉實例。必須用封閉的FunkcjeAPI類型實例(例如x.new A(),其中x是FunkcjeAPI的一個實例)來限定分配。' – TN888

+0

您收到的錯誤是來自其他內容,而不是因爲添加了'Activity'參數。很可能你正在使用不正確的內部類。 –

+0

這是我的完整代碼:https://gist.github.com/anonymous/f63f419dd7ad728aa648 – TN888