Ich habe ein Problem. Ich entwickle eine Android-App, und in meiner Aktivität verwende ich asyncTask. Ich rufe die Aufgabe von meinem onCreate und aktualisiere meine UI in onPostExecute. Ich habe ein listView und in der asyncTask führe ich HTTP-Anfrage aus, um Informationen vom Server zu erhalten. Aber mein Problem ist, dass ich manchmal während der Ausführung der Aktivität keine Ausgabe bekomme.AsyncTask onPost Execute läuft, aber DoInBackground ist nicht
Ich habe versucht, zu debuggen, und es scheint, dass ich einen Ausdruck von onPostExecute aber keine von doInBackground bekomme. Ich verwende Google Cloud Endpoints für HTTP-Anfragen, wenn dies relevant ist.
Bitte helfen.
Hier ist meine Klasse:
public class ILiked extends CustomFragment {
public ArrayList<User> ilikedList = new ArrayList<>();
ListView userList;
MyAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_iliked, null);
ILikedAsyncTask task = new ILikedAsyncTask();
task.execute(new Pair<>(getShared().getString("username", ""), v));
return v;
}
public SharedPreferences getShared() {
SharedPreferences shared;
if (Login.sharedPreferences != null) {
shared = this.getActivity().getSharedPreferences(Login.MyPreferences, Context.MODE_PRIVATE);
} else {
shared = this.getActivity().getSharedPreferences(Signup.MyPreferences, Context.MODE_PRIVATE);
}
return shared;
}
public class ILikedAsyncTask extends AsyncTask<Pair<String, View>, Void, ArrayList<User>> {
private UserApi myApiService = null;
View context;
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("I AM IN PRE EXECUTE");
}
@Override
protected ArrayList<User> doInBackground(Pair<String, View>... params) {
context = params[0].second;
if (myApiService == null) {
UserApi.Builder builder = new UserApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
.setRootUrl("MYURL")
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
myApiService = builder.build();
}
ArrayList<User> list = new ArrayList<>();
try {
String username = params[0].first;
UserCollection users = myApiService.getUsersILiked(username).execute();
System.out.println("CONTENT" + users.getItems().toString());
if (users != null) {
List<User> userList = users.getItems();
list.addAll(userList);
}
} catch (IOException e) {
}
return list;
}
@Override
protected void onPostExecute(final ArrayList<User> result) {
super.onPostExecute(result);
userList = (ListView) context.findViewById(R.id.iliked_list);
adapter = new MyAdapter(context.getContext(), result);
userList.setAdapter(adapter);
//System.out.println("List Content: "+result.get(0));
userList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Profile fr = new Profile();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Bundle args = new Bundle();
args.putString("username", result.get(position).getUsername());
fr.setArguments(args);
ft.replace(R.id.content_frame, fr);
ft.commit();
}
});
System.out.println("DID THE ASYNC");
}
}
}
Könnte eine Möglichkeit sein, dass Sie eine Ausnahme bekommen. Fügen Sie einen 'catch block' hinzu, um dies zu überprüfen. –