Tôi đang sử dụng một IntentService để xử lý các liên lạc mạng với một máy chủ thông qua JSON. Phần JSON/máy chủ đang hoạt động tốt, nhưng tôi gặp khó khăn khi nhận kết quả về nơi cần thiết. Đoạn mã sau đây cho thấy cách tôi bắt đầu dịch vụ ý định từ bên trong onClick(), và sau đó có dịch vụ cập nhật một biến toàn cục để chuyển kết quả trở lại hoạt động chính.Làm thế nào để có được kết quả từ một IntentService trở lại một hoạt động?
public class GXActivity extends Activity {
private static final String TAG = "GXActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
// === called when the activity is first created
Log.i(TAG, "GXActivity Created");
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
View.OnClickListener handler = new View.OnClickListener() {
public void onClick(View v) {
// === set up an application context to hold a global variable
// === called user, to contain results from the intent service
GXApp appState = ((GXApp) getApplicationContext());
User user = new User(-1); // initialize user id to -1
appState.setUser(user);
// === next start an intent service to get JSON from the server;
// === this service updates the user global variable with
// === results from the JSON transaction
Intent intent = new Intent(this, GXIntentService.class);
startService(intent);
// === check app context for results from intent service
appState = ((GXApp) getApplicationContext());
if (appState.getUser().getId() != -1)...
}
}
}
}
Vấn đề tôi đang gặp là dịch vụ ý rằng phân tích cú pháp JSON không nhận được viện dẫn cho đến sau onCreate() hoàn tất, do đó, mã của tôi đó là tìm kiếm các kết quả là bị mắc kẹt nhìn vào kết quả chưa được khởi tạo.
Tôi nên làm gì khác biệt để dịch vụ ý định được gọi trước khi tôi kiểm tra kết quả? Nó sẽ hoạt động nếu tôi kéo trình nghe click vào hàm onCreate()? Có một/tốt hơn để cấu trúc mã này? Cảm ơn nhiều.
thấy điều này có thể hữu ích http://stackoverflow.com/a/9089086/985143 –