简体   繁体   English

来自另一个类的Android Interface类显示空指针异常

[英]Android Interface class from another class show null pointer exception

public class MainActivity extends Activity Implements ICallInterface {

   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

   @Override
    public void onTaskCompleted(Boolean result) {
        if (result) {
            Log.d(TAG, "1111111111111 11111111111 True condition ");

        } else {
            Log.d(TAG, "22222222222222222222 False condition ");
        }   

}

public interface ICallInterface {
    void onTaskCompleted(Boolean result);
}


public class AsycData  extends AsyncTask<String, Void, Void> {

    ICallInterface mCallInterface;


    // AsyncTask Data

    // AsyncTask onPost
         @Override
    protected void onPostExecute(Void result) {

    // call interface, set true value & call first activity.
    mCallInterface.onTaskCompleted(true);

       }
}

Getting null pointer exception at time of call. 在调用时获取空指针异常。

I know something went wrong with my AsycData declaration but couldn't find ans. 我知道我的AsycData声明出了点问题,但是找不到答案。

Any who could help me . 任何能帮助我的人。

I have modified your code, now it working and in log printing true value. 我已经修改了您的代码,现在它可以正常工作并且在日志打印中具有真正的价值。 Now what you want to do you can do with code. 现在,您要执行的操作可以使用代码进行。 if it's work for you then please give up votes. 如果对您有用,请放弃投票。

public class MainActivity extends Activity implements ICallInterface {
    SecondClass second;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // second.execute();
        second = new SecondClass(this);
        second.execute();

    }

    /*
     * 
     * @Override public void onTaskCompleted(Boolean result) { // TODO
     * Auto-generated method stub if (result) {
     * Log.d("tag","1111111111111 11111111111 True condition ");
     * System.out.println(result); // System.out.println(str);
     * Toast.makeText(getApplicationContext(), " "+result,
     * Toast.LENGTH_LONG).show();
     * 
     * 
     * } else { Log.d("tag","22222222222222222222 False condition "); }
     * 
     * }
     */

    @Override
    public void onTaskCompleted(String result) {
        // TODO Auto-generated method stub

        System.out.println(result);

        // System.out.println(str);
        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG)
                .show();

    }
}


public class SecondClass extends AsyncTask<String, String, String> {
    ICallInterface mCallInterface;

    public SecondClass(ICallInterface mcaCallInterface) {
        // TODO Auto-generated constructor stub
        this.mCallInterface = mcaCallInterface;
    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        String str = "Hello";
        return str;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        mCallInterface.onTaskCompleted(result);

        super.onPostExecute(result);
    }

}


public interface ICallInterface {
    void onTaskCompleted(String result);

}

I have modified your code, now it woking and in log printing true value. 我已经修改了您的代码,现在它可以正常工作并在日志中打印出真正的价值。 Now what you want to do you can do with code. 现在,您要执行的操作可以使用代码进行。 if it's work for you then please give up votes. 如果对您有用,请放弃投票。

public class MainActivity extends Activity implements ICallInterface {
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new AsycData(MainActivity.this).execute();
    }

    @Override
    public void onTaskCompleted(Boolean result) {
        if (result) {
            Log.d("TAG", "1111111111111 11111111111 True condition ");

        } else {
            Log.d("TAG", "22222222222222222222 False condition ");
            }

        }
    }

    interface ICallInterface {
        void onTaskCompleted(Boolean result);
    }

    class AsycData extends AsyncTask<String, Void, Void> {
        Activity activity;

        public AsycData(MainActivity activity) {
            this.activity = activity;
        }

        @Override
        protected void onPostExecute(Void result) {
            ((ICallInterface) activity).onTaskCompleted(true);

        }

        @Override
        protected Void doInBackground(String... arg0) {
            return null;
        }
    }

mCallInterface is not initiated. mCallInterface未启动。 Initialize it before using 使用前进行初始化

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM