-1
AsyncTask를 구현하고 AsyncTask가있는 인터페이스를 구현하여 생성 된 사용자 개체를 AsyncTask가 .execute() 이후에 시작되는 새 Activity로 전송할 수 있습니다.AsyncTask 인터페이스의 NullPointerException
문제는 인터페이스로 인해 발생한 것으로 보입니다. 데이터 송수신에 문제가 없습니다.
NullPointerException을 유발하는 결과를 선언하지 않습니까? 아무도 잘못 구현 된 것을 볼 수 있습니까?
는 createuser가 여기에
public static class CreateUser extends AsyncTask<User, Void, User> { Context mContext; public interface CreateUserInterface { public void getCreatedUser(User user); public void getUserCreateErrorMessage(String error); } CreateUserInterface callback; public CreateUser(Context context) { // TODO Auto-generated constructor stub this.mContext = context; // callback = (CreateUserInterface) context; } @Override protected User doInBackground(User... params) { ObjectMapper mapper = new ObjectMapper(); // create once, reuse User user = params[0]; String url = ROUTE_USER_CREATE; HttpPost httppost = new HttpPost(url); HttpClient httpclient = new DefaultHttpClient(); String UserJSONResponse = null; try { String jsonString = mapper.writeValueAsString(user); StringEntity m_stringEntity = new StringEntity(jsonString); httppost.setEntity(m_stringEntity); httppost.addHeader("Content-type", "application/json"); HttpResponse postResponse = httpclient.execute(httppost); UserJSONResponse = EntityUtils.toString(postResponse .getEntity()); user = mapper.readValue(UserJSONResponse, User.class); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return user; } @Override protected void onPostExecute(User result) { // TODO Auto-generated method stub super.onPostExecute(result); //User user = new User(); Log.e("USERNAME", result.getUser_name()); callback.getCreatedUser(result); } }
내가에서 사용자를 검색하는 것을 시도하고있는 활동이며, 인터페이스 을 구현
public class UserFragment extends Fragment implements OnClickListener, UserREST.CreateUser.CreateUserInterface {
UserREST.CreateUser createUserAsyncTask;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup content_frame,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_user, content_frame, false);
createUserAsyncTask = new UserREST.CreateUser(getActivity());
Spinner spinner = (Spinner) view.findViewById(R.id.spinnerUserChoice);
// Create an ArrayAdapter using the string array and a default spinner
// layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
getActivity(), R.array.user_choice_array,
android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
setHasOptionsMenu(true);
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Add your menu entries here
// inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.user_navigation, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_createUser:
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
Fragment mCreateUserFragment = new CreateUserFragment();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, mCreateUserFragment).commit();
}
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
default:
break;
}
}
@Override
public void getCreatedUser(User user) {
// TODO Auto-generated method stub
Log.e("USERNAME", user.getUser_name());
}
@Override
public void getUserCreateErrorMessage(String error) {
// TODO Auto-generated method stub
}
스택 추적 :
10-23 14:16:08.265: E/AndroidRuntime(463): FATAL EXCEPTION: main
10-23 14:16:08.265: E/AndroidRuntime(463): Process: com.e.main, PID: 463
10-23 14:16:08.265: E/AndroidRuntime(463): java.lang.NullPointerException
10-23 14:16:08.265: E/AndroidRuntime(463): at com.e.rest.UserREST$CreateUser.onPostExecute(UserREST.java:166)
10-23 14:16:08.265: E/AndroidRuntime(463): at com.e.rest.UserREST$CreateUser.onPostExecute(UserREST.java:1)
10-23 14:16:08.265: E/AndroidRuntime(463): at android.os.AsyncTask.finish(AsyncTask.java:632)
10-23 14:16:08.265: E/AndroidRuntime(463): at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-23 14:16:08.265: E/AndroidRuntime(463): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
10-23 14:16:08.265: E/AndroidRuntime(463): at android.os.Handler.dispatchMessage(Handler.java:102)
10-23 14:16:08.265: E/AndroidRuntime(463): at android.os.Looper.loop(Looper.java:136)
10-23 14:16:08.265: E/AndroidRuntime(463): at android.app.ActivityThread.main(ActivityThread.java:5105)
10-23 14:16:08.265: E/AndroidRuntime(463): at java.lang.reflect.Method.invokeNative(Native Method)
10-23 14:16:08.265: E/AndroidRuntime(463): at java.lang.reflect.Method.invoke(Method.java:515)
10-23 14:16:08.265: E/AndroidRuntime(463): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
디버그 응용 프로그램 및 null의 내용을 확인 .. Prolly 콜백 .. – Selvin
어느 것이 166 행인지에 따라 결과가 널 (null)이거나 콜백이됩니다. –
문제가 해결되었지만 이상하게 보입니다. 인터페이스는 Fragment 대신 Activity에서 구현되어야합니다. 나는 그것이 일이 이루어져야하는 방법인지 확실하지 않습니다. 데이터를 Activity에서 사용하는 것보다 사용해야하는 Fragment에 데이터를 전달하겠습니까? 해당 데이터 (사용자)에 대한 새 개체를 만듭니다. –