2013-02-25 48 views
12

lớp học của tôi trông như thế này:cách sử dụng getContentResolver trong một lớp học không có hoạt động?

public class sendInformation{ 

    public void test() throws Exception { 
    Uri uri = SuspiciousActivityTable.CONTENT_URI; 
    getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
    } 
    } 
} 

nhưng nó nói getContentResolver() không tồn tại, tôi biết tôi cần một bối cảnh hay Hoạt động để làm công việc này nhưng làm thế nào để tôi có được bối cảnh đúng đây?

+0

'public void class' Điều đó không thực hiện bất kỳ ý nghĩa. Các lớp không thể có kiểu trả về. –

+0

Ok vì vậy lớp này được gọi từ một lớp khác mở rộng hoạt động vì vậy tôi phải vượt qua bối cảnh đó làm thế nào tôi có thể làm điều đó? – user2033349

+0

xem chỉnh sửa của tôi. Thông thường bạn bỏ qua 'this' để' test() ' –

Trả lời

27

Bạn sẽ cần phải vượt qua một bối cảnh, ngay cả lớp ContentResolver cần ngữ cảnh hợp lệ để được khởi tạo.

Cách đơn giản nhất là như một cuộc tranh cãi với phương pháp:

public void test(Context context) throws Exception { 
    Uri uri = SuspiciousActivityTable.CONTENT_URI; 
    context.getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
    } 

Và để gọi: (giả sử rằng lớp có chứa test là instantiated tên của hoạt động của bạn là MyActivity < - Thay thế bằng tên Activity bạn đang gọi điện thoại test()từ)

try{ 
    sendInformationInstanceVariable.test (MyActivity.this); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

MyActivity.this có thể được rút ngắn thành chỉ thisnếu bạn không gọi test() từ bên trong một lớp bên trong ẩn danh.

Ngoài ra, nếu lớp học của bạn thực sự không có lý do chính đáng để được khởi tạo, hãy xem xét làm test() một phương pháp static, như thế này:

public static void test(Context context) throws Exception { 
     Uri uri = SuspiciousActivityTable.CONTENT_URI; 
     context.getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
     } 

Sau đó từ Activity của bạn, bạn gọi phương pháp này mà không cần một Ví dụ:

try{ 
    sendInformation.test (MyActivity.this); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

Cuối cùng, ném Exception là xấu thực hành, làm không làm điều đó mà không cần lý do chính đáng và nếu bạn không có một lý do chính đáng, càng cụ thể càng tốt.

+1

cảm ơn rất nhiều tôi đã rất khó hiểu về điều này, rất dễ dàng khi bạn hiểu bạn đang làm gì nhờ :) – user2033349

+0

làm thế nào bạn sẽ làm điều đó trong một dịch vụ?Sự hiểu biết của tôi là bạn _cannot_ chuyển ngữ cảnh đến một dịch vụ. –

+1

@ robertotomás Dịch vụ là một bối cảnh –

8

Một nơi nào đó giữa nơi ứng dụng của bạn bắt đầu (và bạn có quyền truy cập vào getApplicationContext()) và điểm bạn gọi test(), bạn sẽ cần phải chuyển số Context vào lớp sendInformation của mình. Tôi sẽ nhìn vào những gì Lifecycle lớp sendInformation bạn có và so sánh nó với các thành phần Android khác nhau (ứng dụng, Hoạt động, Fragment) và sử dụng bối cảnh phù hợp từ đó:

  • Ứng dụng: getApplicationContext()

  • Hoạt động: này (như Hoạt động mở rộng Context)

  • Fragment: getActivity()
Các vấn đề liên quan