2013-05-06 52 views
8

Tôi đang sử dụng SDK Android của Facebook và muốn đóng Hoạt động của mình sau khi người dùng đăng nhập và nhận đối tượng người dùng. Trong thực tế tôi đang lưu trữ một phần của nó nhưng tôi muốn đóng hoạt động bất kể.kết thúc cuộc gọi() từ phương thức tĩnh

 // make request to the /me API 
     Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

     // callback after Graph API response with user object 
     @Override 
     public void onCompleted(GraphUser user, Response response) { 
      if (user != null) { 
      finish(); // causes errors 
      } 
     } 
     }); 

Thông báo lỗi IDE trên finish() là: "Cannot make a static reference to the non-static method finish() from the type Activity"

làm thế nào để tiến hành?

+1

Hãy thử 'getActivity(). Finish();' nếu bạn có một ngữ cảnh, sau đó 'context.getActivity.finish()' – Pragnani

+1

bạn đã thử http://stackoverflow.com/a/12025698/1218762 này chưa? –

+0

@Rstar làm việc như một sự quyến rũ – CQM

Trả lời

24

Tạo một tham chiếu đến hoạt động của bạn trong onCreate với

//onCreate 
final Activity activity = this; 

Sau đó, bạn có thể sử dụng trong callback onCompleted bạn

activity.finish(); 

Bạn có thể phải làm Activity activity toàn cầu.

EDIT 2014/02/26:

Lưu ý rằng gọi finish() từ một phương pháp tĩnh có lẽ là thói quen xấu. Bạn đang nói một trường hợp cụ thể của một Activity với vòng đời của chính nó mà nó phải tự tắt từ một phương pháp tĩnh, một cái gì đó mà không có bất kỳ vòng đời hay trạng thái nào. Tốt nhất bạn nên gọi finish() từ thứ gì đó có gắn với Activity.

+0

một cái gì đó như thế này làm việc! 'hoạt động tĩnh hoạt động;' không có lỗi nhiều hơn, chúng ta sẽ thấy những gì xảy ra tôi biên dịch :) – CQM

+0

Tôi vui mừng, nếu nó hoạt động xin vui lòng đánh dấu câu hỏi là chính xác để điều này không còn là "chưa trả lời". – bclymer

+0

vâng, nó hoạt động như dự định, cuối cùng tôi đã biên dịch nó, cảm ơn bạn! – CQM

3

Đối với một số, phương pháp của bclymer có thể không hoạt động. Nó không về tôi, sử dụng phiên bản beta mới nhất Android Studio ... Hãy thử này ...

public class myActivity extends Activity { 

    public static Activity activity = null; 
    ... 
    ... 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myActivity_layout); 

     activity = this; 
     .... 
     .... 
    } 
} 

từ hoạt động khác của bạn trong cùng một gói, chỉ đơn giản là ....

// use try catch to avoid errors/warning that may affect the 
    // next method execution 
    try { 
     myActivity.activity.finish(); 
    } catch (Exception ignored) {} 
Các vấn đề liên quan