저는 모든 액티비티/프래그먼트에 대한 asyntask를 가졌지 만, 지금은 각 액티비티에 대한 인터페이스를 구현하고 있지만 콜백은 항상 null이며 이유를 알 수 없습니다 . asyncTask라고하는 각각의 액티비티는 인터페이스를 구현합니다. AsyncTask를안드로이드 - 인터페이스 callBack이 널 포인터를 던졌습니다. 예외
public class MainActivity extends Activity implements MainActivityAsyncInterface, OnClickListener, UserPictureDialogInterface {
private DrawerLayout moodydrawerLayout;
private HashMap<String, String> organizedCourses = new HashMap<String, String>();
// ManSession Manager Class
ManSession session;
private long startTime;
private long endTime;
private ModDevice md;
private float screenX;
private float screenY;
private int shotType = ShowcaseView.TYPE_ONE_SHOT;
private MoodleUser currentUser;
private String url;
private String token;
private String userId;
private static long backPressed;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The following line triggers the initialization of ACRA
.......
session = new ManSession(getApplicationContext());
url = session.getValues(ModConstants.KEY_URL, null);
token = session.getValues(ModConstants.KEY_TOKEN, null);
userId = session.getValues(ModConstants.KEY_ID, null);
new DataAsyncTask(this,).execute(url, token, EXAMPLE.CORE_USER_GET_USERS_BY_ID, userId, MainActivity.class.getSimpleName());
populateLeft();
populateRight();
receiveNotification();
initDemoOverlay();
drawerLayoutListener();
warningMessage(checkConnection(), Toast.LENGTH_LONG, null, getString(R.string.no_internet));
ChangeLogListView sad = new ChangeLogListView(getApplicationContext());
}
AsyncTask를을 인터페이스와 콜의 구현
내 클래스는는
public class DataAsyncTask extends AsyncTask<Object, Void, Object> {
Object jObj = null;
public MainActivityAsyncInterface mainActivityInterface;
private ProgressDialog dialog;
private CountDownTimer cvt = createCountDownTimer();
private Context context;
private MoodleServices webService;
private String parentActivity;
private String fillTheSpace;
public DataAsyncTask(Context context) {
this.context = context;
dialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
cvt.start();
}
@Override
protected Object doInBackground(Object... params) {
String urlString = (String) params[0];
String token = (String) params[1];
webService = (MoodleServices) params[2];
Object webServiceParams = params[3];
parentActivity = (String) params[4];
case EXAMPLE:
InputStream inputStream = new URL(urlString).openStream();
Drawable drawable = Drawable.createFromStream(inputStream, null);
inputStream.close();
return drawable;
default:
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* <p>
* Method that parses a supposed id list object
* </p>
*
* @param Object
* ids - The object to be parsed to Long[].
* @return resultList - The ids List
*/
private Long[] parseIds(Object ids) {
Long[] resultList = null;
try {
resultList = (Long[]) ids;
} catch (Exception e) {
resultList = new Long[1];
resultList[0] = (Long) ids;
}
return resultList;
}
@Override
protected void onPostExecute(Object obj) {
cvt.cancel();
if (dialog != null && dialog.isShowing())
dialog.dismiss();
switch (webService) {
case EXAMPLE:
if (parentActivity.equalsIgnoreCase(MainActivity.class.getSimpleName()))
mainActivityInterface.userAsyncTaskResult(obj); \\This the line 173 and the obj != null and mainActivityInterface is null
if (parentActivity.equalsIgnoreCase(UserDetailsActivity.class.getSimpleName()))
fillTheSpace = "TODO - Interface for each parent class";
if (parentActivity.equalsIgnoreCase(FragTopicsPreview.class.getSimpleName()))
fillTheSpace = "TODO - Interface for each parent class";
if (parentActivity.equalsIgnoreCase(FragTopics.class.getSimpleName()))
fillTheSpace = "TODO - Interface for each parent class";
break;
case EXAMPLE2:
if (parentActivity.equalsIgnoreCase(MainActivity.class.getSimpleName()))
mainActivityInterface.userAsyncTaskResult(obj);
if (parentActivity.equalsIgnoreCase(UserDetailsActivity.class.getSimpleName()))
fillTheSpace = "TODO - Interface for each parent class";
if (parentActivity.equalsIgnoreCase(FragTopicsPreview.class.getSimpleName()))
fillTheSpace = "TODO - Interface for each parent class";
if (parentActivity.equalsIgnoreCase(FragTopics.class.getSimpleName()))
fillTheSpace = "TODO - Interface for each parent class";
break;
default:
break;
}
}
private CountDownTimer createCountDownTimer() {
return new CountDownTimer(250, 10) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
dialog = new ProgressDialog(context);
dialog.setMessage("Loading...");
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
};
}
로그 캣 : 내 경험에서
04-27 11:54:11.520: E/AndroidRuntime(1428): FATAL EXCEPTION: main
04-27 11:54:11.520: E/AndroidRuntime(1428): Process: com.firetrap.moody, PID: 1428
04-27 11:54:11.520: E/AndroidRuntime(1428): java.lang.NullPointerException
04-27 11:54:11.520: E/AndroidRuntime(1428): at connections.DataAsyncTask.onPostExecute(DataAsyncTask.java:173)
04-27 11:54:11.520: E/AndroidRuntime(1428): at android.os.AsyncTask.finish(AsyncTask.java:632)
04-27 11:54:11.520: E/AndroidRuntime(1428): at android.os.AsyncTask.access(AsyncTask.java:177)
04-27 11:54:11.520: E/AndroidRuntime(1428): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
04-27 11:54:11.520: E/AndroidRuntime(1428): at android.os.Handler.dispatchMessage(Handler.java:102)
04-27 11:54:11.520: E/AndroidRuntime(1428): at android.os.Looper.loop(Looper.java:136)
04-27 11:54:11.520: E/AndroidRuntime(1428): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-27 11:54:11.520: E/AndroidRuntime(1428): at java.lang.reflect.Method.invokeNative(Native Method)
04-27 11:54:11.520: E/AndroidRuntime(1428): at java.lang.reflect.Method.invoke(Method.java:515)
04-27 11:54:11.520: E/AndroidRuntime(1428): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-27 11:54:11.520: E/AndroidRuntime(1428): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-27 11:54:11.520: E/AndroidRuntime(1428): at dalvik.system.NativeStart.main(Native Method)
인터페이스하지 않습니다 내 코드와 함께 nullPointer 예외를 보내야하고 인터페이스를 초기화 할 필요는 없지만이 시점에서 나는 모든 옵션을 테이블에 둔다.
에 대한 참조를 통과 할 수있는 라인 onPostExecute (DataAsyncTask.java:173)? – Szymon
줄에 플래그를 지정하는 코드에 대한 주석이 있습니다. mainActivityInterface.userAsyncTaskResult (obj); \\이 줄은 173이고 obj! = null이고 mainActivityInterface는 null입니다 – firetrap
mainActivityInterface를 초기화하지 않았습니까? –