【问题标题】:Android - How to get calling Activity?Android - 如何获取通话活动?
【发布时间】:2013-07-28 10:43:33
【问题描述】:

Activity (SignInActivity) 正在调用FunkcjeAPI 中的一个方法,该方法执行AsyncTask

我的AsyncTask 应该使用调用Activity 显示ProgressDialog。我不知道如何给构造函数一个正确的Activity。我尝试了很多东西,阅读了很多关于 SO 的教程和问题,但我找不到解决方案。 FunkcjeAPI 不是 Activity,所以我不能写 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);

        }


    }

【问题讨论】:

  • 你可以使用getApplicationContext()
  • @TomerMor 我写了Context.getApplicationContext(),但后来我看到编译器错误

标签: android android-asynctask android-activity


【解决方案1】:

在接受ActivityzalogujSie()方法中再添加一个参数,然后使用该参数启动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"); 

【讨论】:

  • 它不起作用:我看到那个错误No enclosing instance of type FunkcjeAPI is accessible. Must qualify the allocation with an enclosing instance of type FunkcjeAPI (e.g. x.new A() where x is an instance of FunkcjeAPI).
  • 您得到的错误来自其他东西,而不是因为添加了Activity 参数。很可能您使用了不正确的内部类。
  • Logowanie 类声明为静态类:private static class Logowanie{ ... }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多