2013-04-15 3 views
-3

Мне было поручено решить проблему для группового проекта в моем университете, однако я не могу решить проблему с NullPointerException в моем классе обслуживания. Наша цель - создать скрипт, который постоянно контролирует историю Android до тех пор, пока не найдет совпадение, а затем выполнит класс предупреждения, если класс службы обнаружит совпадение в истории браузера. Проблема возникает в строке 71 (класса обслуживания), однако я не знаю, как решить проблему.Не удается разрешить NullPointerException в классе обслуживания

Класс обслуживания:

public class Service_class extends Service { 
    String Dirty1 = "www.pornhub.com"; 
    String Dirty2 = "www.playboy.com"; 
    String Dirty3 = "www.playboy.com"; 
    String Dirty4 = "www.playboy.com"; 
    String Dirty5 = "www.playboy.com"; 
    String Dirty6 = "www.playboy.com"; 
    String Dirty7 = "www.playboy.com"; 
    String Dirty8 = "www.playboy.com"; 
    String Dirty9 = "www.playboy.com"; 
    String Dirty10 = "www.playboy.com"; 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 




     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 

     super.onDestroy(); 
     Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     TextView tv = (TextView) findViewById(R.id.hello); 
     String[] projection = new String[] { Browser.BookmarkColumns.TITLE, 
     Browser.BookmarkColumns.URL }; 
     Cursor cursor = managedQuery(android.provider.Browser.BOOKMARKS_URI, 
       projection, null, null, null); 
     String urls = ""; 
     if (cursor.moveToFirst()) { 
     String url1 = null; 
     String url2 = null; 
     do { 
     String url = cursor.getString(cursor.getColumnIndex(Browser.BookmarkColumns.URL)); 

     if (url.toLowerCase().contains(Dirty1)) { 
     } else if (url.toLowerCase().contains(Dirty2)) { 
     } else if (url.toLowerCase().contains(Dirty3)) { 
     } else if (url.toLowerCase().contains(Dirty4)) { 
     } else if (url.toLowerCase().contains(Dirty5)) { 
     } else if (url.toLowerCase().contains(Dirty6)) { 
     } else if (url.toLowerCase().contains(Dirty7)) { 
     } else if (url.toLowerCase().contains(Dirty8)) { 
     } else if (url.toLowerCase().contains(Dirty9)) { 
     } else if (url.toLowerCase().contains(Dirty10)) { 
     //if (url.toLowerCase().contains(Filthy)) { 
     urls = urls 
     + cursor.getString(cursor.getColumnIndex(Browser.BookmarkColumns.TITLE)) + " : " 
     + url + "\n"; 
     Intent intent = new Intent(Service_class.this, Warning.class); 
     Service_class.this.startActivity(intent); 
     } 
     } while (cursor.moveToNext()); 
    // tv.setText(urls); 
    } 

} 

    private void setContentView(int main3) { 
     // TODO Auto-generated method stub 

    } 

    private TextView findViewById(int hello) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    private Cursor managedQuery(Uri bookmarksUri, String[] projection, 
      Object object, Object object2, Object object3) { 
     // TODO Auto-generated method stub 
     return null; 
    }} 

Main.java

import java.util.Calendar; 
import com.parse.ParseAnalytics; 
import com.parse.ParseObject; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.AlertDialog; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.net.TrafficStats; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Chronometer; 
import android.widget.TextView; 

public class Main extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main3); 

    // Start service using AlarmManager 

    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.SECOND, 10); 
    Intent intent = new Intent(Main.this, Service_class.class); 
    PendingIntent pintent = PendingIntent.getService(Main.this, 0, intent, 
      0); 
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
      36000 * 1000, pintent); 

    // click listener for the button to start service 
    Button btnStart = (Button) findViewById(R.id.button1); 
    btnStart.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startService(new Intent(getBaseContext(), Service_class.class)); 

     } 
    }); 

    // click listener for the button to stop service 
    Button btnStop = (Button) findViewById(R.id.button2); 
    btnStop.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      stopService(new Intent(getBaseContext(), Service_class.class)); 
     } 
    }); 
}} 

LogCat:

04-15 13:58:49.980: D/AndroidRuntime(1994): Shutting down VM 
04-15 13:58:50.000: W/dalvikvm(1994): threadid=1: thread exiting with uncaught exception (group=0x40cc7930) 
04-15 13:58:50.000: E/AndroidRuntime(1994): FATAL EXCEPTION: main 
04-15 13:58:50.000: E/AndroidRuntime(1994): java.lang.RuntimeException: Unable to create service com.nfc.linked.Service_class: java.lang.NullPointerException 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2539) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.app.ActivityThread.access$1600(ActivityThread.java:141) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.os.Looper.loop(Looper.java:137) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at dalvik.system.NativeStart.main(Native Method) 
04-15 13:58:50.000: E/AndroidRuntime(1994): Caused by: java.lang.NullPointerException 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at com.nfc.linked.Service_class.onCreate(Service_class.java:71) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2529) 
04-15 13:58:50.000: E/AndroidRuntime(1994):  ... 10 more 
04-15 14:00:23.770: D/AndroidRuntime(2047): Shutting down VM 
04-15 14:00:23.770: W/dalvikvm(2047): threadid=1: thread exiting with uncaught exception (group=0x40cc7930) 
+2

_ Проблема возникает в строке 71_ ---> Пожалуйста, укажите нам эту строку. – Smit

+0

if (cursor.moveToFirst()) { –

ответ

3

Ваш метод managedQuery() возвращает нуль

private Cursor managedQuery(Uri bookmarksUri, String[] projection, 
     Object object, Object object2, Object object3) { 
    // TODO Auto-generated method stub 
    return null; 
}} 

Итак, когда вы пытаетесь выполнить метод на null, вы получите NullPointerException.

Cursor cursor = managedQuery(android.provider.Browser.BOOKMARKS_URI, 
      projection, null, null, null); // cursor will be null 
String urls = ""; 
if (cursor.moveToFirst()) { // this will be NPE 

Сделайте ваш метод managedQuery() вернуть инстанцированный Cursor объект.

+0

Как это можно решить? Скрипт работает при использовании его за пределами класса службы, однако при добавлении его в класс обслуживания он запускается многократно - он не может выполняться. (Мы попытались добавить setContentView (R.layout.main3), так что он может найти такие элементы, но я не уверен, подходит ли это для класса обслуживания, поскольку он должен работать в фоновом режиме без видимого макета) –

+0

If он работает вне класса обслуживания, код внутри 'onCreate()' не получает вызов, поэтому вы никогда не дойдете до того момента, когда у вас есть метод, называемый объектом «null». –

+0

Спасибо, сэр! Мы высоко ценим вашу помощь. –

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