2015-03-21 3 views
1

Раньше я использовал kelas1 extends Service, и мой код работал на чтение входящих сообщений. Но я не знаю, как заставить это работать, если мой класс использует kelas1 extends thread.Передача контекста из класса extends thread

sms.inbox(kelas1.this,localDataOutputStream); 

И это мой код:

kelas1.java

public class kelas1 extends Thread { 
public void run() { 
    //code 
    while (true) { 

     charsRead = in.read(buffer); 
     if (charsRead != 1) { 
      String message = new String(buffer).substring(0, charsRead).replace(System.getProperty("line.separator"),""); 
      Log.d("wew", message); 

       // this is my problem 
      sms.inbox(kelas1.this,localDataOutputStream); 
    } 

} 

readsms.java

public class readsms { 

    public void inbox(Context context, DataOutputStream outstr) throws IOException{ 
     Uri uriSMSURI = Uri.parse("content://sms/inbox"); 

      Cursor cur = context.getContentResolver().query(uriSMSURI, null, null, null,null); 
      String sms = ""; 
      int body = cur.getColumnIndex("body"); 
      while (cur.moveToNext()) { 
       sms += "Dari :" + cur.getString(2) + " : " + cur.getString(body);   
      } 
      Log.d("wew", sms); 
      sms = sms + "\nbaca sms selesai"; 
      outstr.writeBytes(sms); 
    } 
} 
+1

почему бы не использовать услугу или пристальный услугу? – Raghunandan

+0

вам придется передать контекст конструктору класса kelas1 и использовать его там. – Raghunandan

+0

Я просто следую примеру кода для funing в фоновом режиме, и код нравится. Оке. я пытаюсь перейти на службу, – kresek

ответ

0

Вам нужен контекст класса активности, так что вам нужен один конструктор в kelas1

Context context; 

public kelas1(Context context) 
{ 
    this.context = context; 
} 

затем в своем коде вы должны использовать этот контекст как:

 sms.inbox(context,localDataOutputStream); 

изменить код Наверху что-то вроде:

final Context context; 
public class kelas1 extends Activity { 

    public kelas1(Context context) 
    { 
     this.context = context; 
     call_thread(); 
    } 

public void call_thread(){ 
     new Thread(new Runnable(){ 
     public void run() { 
      while (true) { 
       charsRead = in.read(buffer); 
       if (charsRead != 1) { 
        String message = new String(buffer).substring(0, charsRead).replace(System.getProperty("line.separator"),""); 
        Log.d("wew", message); 

        // this is my problem 
         sms.inbox(this.context,localDataOutputStream); 
       } 
       } 
      }).start(); 

     } 
    } 
+0

Привет, спасибо за ваш ответ, я следую вашему коду, и это делает другой класс, который должен быть изменен. И у меня есть изменения, но они все еще не работают. Может быть, я ошибаюсь ?? до: public class servicenya extends Service { \t Тема: t = new kelas1(); После: public class servicenya extends Service { \t Тема t = новый kelas1 (servicenya.this); – kresek

+0

Спасибо, я попробую, и я снова буду комментировать результат. : D – kresek

+0

Хорошо, помните, что это только пример. Все, что вам нужно, это Контекст, чтобы сделать свою оригинальную работу. Не забудьте добавить kelas1 в AndroidManifest, если вы измените его на Activity! – Petro

Смежные вопросы