2
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);

       }
}

呼び出し時にヌル ポインター例外を取得します。

AsycData 宣言で問題が発生したことはわかっていますが、ans が見つかりませんでした。

私を助けることができる人。

4

3 に答える 3

4

私はあなたのコードを修正しました。今は機能しており、ログに真の値が出力されています。やりたいことがコードでできるようになりました。それがあなたのために働くなら、投票をあきらめてください。

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

}
于 2014-07-01T08:16:29.900 に答える
1

私はあなたのコードを変更しました。今ではそれが機能し、ログに真の値が出力されています。やりたいことがコードでできるようになりました。それがあなたのために働くなら、投票をあきらめてください。

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;
        }
    }
于 2013-06-29T07:59:44.370 に答える
0

mCallInterface開始されません。使用する前に初期化してください

于 2013-06-29T07:17:25.863 に答える