2014-10-09 59 views
1

嘗試運行應用程序時,我意外地收到了空點異常錯誤。它發生時我在「的iChat按鈕」,這將導致你到另一個網頁點擊:空點異常錯誤 - android.content.ContextWrapper.startService

下面是日誌貓消息:

10-09 17:50:20.505: E/AndroidRuntime(1005): FATAL EXCEPTION: main 
10-09 17:50:20.505: E/AndroidRuntime(1005): java.lang.NullPointerException 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at android.content.ContextWrapper.startService(ContextWrapper.java:383) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at com.dooba.beta.matchOptionActivity1$3$1.done(matchOptionActivity1.java:241) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at com.parse.FindCallback.internalDone(FindCallback.java:45) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at com.parse.FindCallback.internalDone(FindCallback.java:31) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at com.parse.Parse$6$1.run(Parse.java:917) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at android.os.Handler.handleCallback(Handler.java:615) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at android.os.Looper.loop(Looper.java:137) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-09 17:50:20.505: E/AndroidRuntime(1005):  at dalvik.system.NativeStart.main(Native Method) 

下面是代碼:

public class matchOptionActivity1 extends Activity{ 

    protected TextView mUserRetrieved; 
     private String currentUserId; 

     protected TextView mUserActivityNameRetrieved; 
     protected TextView mUserNameRetrieved; 
     protected TextView mUserAgeRetrieved; 
     protected TextView mUserHeadlineRetrieved; 
     String userGender = ParseUser.getCurrentUser().getString("Gender"); 
     String activityName = ParseUser.getCurrentUser().getString("ActivityName"); 
     Number maxDistance = ParseUser.getCurrentUser().getNumber(
       "Maximum_Distance"); 
     String userLookingGender = ParseUser.getCurrentUser().getString(
       "Looking_Gender"); 
     Number minimumAge = ParseUser.getCurrentUser().getNumber("Minimum_Age"); 
     Number maximumAge = ParseUser.getCurrentUser().getNumber("Maximum_Age"); 
     Number userage = ParseUser.getCurrentUser().getNumber("UserAge"); 
     private FeedbackDialog feedBack; 
     private ProgressDialog progressDialog; 
     private BroadcastReceiver receiver; 
     private MessageService.MessageServiceInterface sinchService; 
     private Boolean bound = false; 

     private Intent intent; 
     private Intent serviceIntent; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.matchoption); 



    feedBack = new FeedbackDialog(this, "AF-46D8F2A319EA-0A"); 
     ParseQuery<ParseUser> query = ParseUser.getQuery(); 

     // query.whereEqualTo("ActivityName",userActivitySelectionName); 

     query.whereNotEqualTo("objectId", ParseUser.getCurrentUser() 
       .getObjectId()); 
     // users with Gender = currentUser.Looking_Gender 
     query.whereEqualTo("Gender", userLookingGender); 
     // users with Looking_Gender = currentUser.Gender 
     query.whereEqualTo("Looking_Gender", userGender); 
     query.setLimit(1); 
     // query2.whereEqualTo("UserMatchedRequest1", "confirmed"); 
     query.whereEqualTo("ActivityName", activityName); 
     query.whereGreaterThanOrEqualTo("UserAge", minimumAge); 
     query.whereLessThanOrEqualTo("UserAge", maximumAge); 

     ParseQuery<ParseUser> query2 = ParseUser.getQuery(); 

     // query.whereEqualTo("ActivityName",userActivitySelectionName); 

     query2.whereNotEqualTo("objectId", ParseUser.getCurrentUser() 
       .getObjectId()); 
     // users with Gender = currentUser.Looking_Gender 
     query2.whereEqualTo("Gender", userLookingGender); 
     // users with Looking_Gender = currentUser.Gender 
     query2.whereEqualTo("Looking_Gender", userGender); 
     query2.setLimit(1); 
     // query2.whereEqualTo("UserMatchedRequest1", "confirmed"); 
     query2.whereEqualTo("ActivityName", activityName); 
     query2.whereGreaterThanOrEqualTo("UserAge", minimumAge); 
     query2.whereLessThanOrEqualTo("UserAge", maximumAge); 

     query.findInBackground(new FindCallback<ParseUser>() { 
      @Override 
      public void done(List<ParseUser> objects,ParseException e) { 

       for(int i=0;i<objects.size();i++){ 
        // Do whatever you need to extract object from "users" 
        ParseQuery<ParseObject> query = ParseQuery.getQuery("User"); 
        query.whereNotEqualTo("objectId", ParseUser.getCurrentUser() 
          .getObjectId()); 
        // users with Gender = currentUser.Looking_Gender 
        query.whereEqualTo("Gender", userLookingGender); 
        // users with Looking_Gender = currentUser.Gender 
        query.whereEqualTo("Looking_Gender", userGender); 
        query.setLimit(1); 
        // query2.whereEqualTo("UserMatchedRequest1", "confirmed"); 

        query.whereEqualTo("ActivityName", activityName); 
        query.whereGreaterThanOrEqualTo("UserAge", minimumAge); 
        query.whereLessThanOrEqualTo("UserAge", maximumAge); 

        mUserNameRetrieved = (TextView) findViewById(R.id.tvmname1); 

        mUserNameRetrieved.setText(objects.get(i).get("Name").toString()); 



       } 
    }//for loop 
      }); 

     query2.findInBackground(new FindCallback<ParseUser>() { 

      @Override 
      public void done(List<ParseUser> objects,ParseException e) { 

       for(int i=0;i<objects.size();i++){ 
        // Do whatever you need to extract object from "users" 
         ParseQuery<ParseObject> query2 = ParseQuery.getQuery("User"); 
         query2.whereNotEqualTo("objectId", ParseUser.getCurrentUser() 
           .getObjectId()); 
         // users with Gender = currentUser.Looking_Gender 
         query2.whereEqualTo("Gender", userLookingGender); 
         // users with Looking_Gender = currentUser.Gender 
         query2.whereEqualTo("Looking_Gender", userGender); 
         query2.setLimit(1); 
        // query2.whereEqualTo("UserMatchedRequest1", "confirmed"); 

         query2.whereEqualTo("ActivityName", activityName); 
         query2.whereGreaterThanOrEqualTo("UserAge", minimumAge); 
         query2.whereLessThanOrEqualTo("UserAge", maximumAge); 


        ParseFile image = objects.get(i).getParseFile("ProfilePicture"); 


        ParseImageView imageView = (ParseImageView) findViewById(R.id.profilePictureresultm); 



        // The placeholder will be used before and during the fetch, to be replaced by the fetched image 
        // data. 
        imageView.setPlaceholder(getResources().getDrawable(R.drawable.profile_pict)); 
        imageView.setParseFile(image); 

        imageView.loadInBackground(new GetDataCallback() { 
         @Override 
         public void done(byte[] data, ParseException e) { 
          if (data != null) { 
           Log.i("ParseImageView", "Fetched: " + data.length); 
          } else { 
           Log.e("ParseImageView", "Error fetching: " + e.getMessage()); 
          } 
         } 


       }); 
       } 
    }//for loop 
      }); 




     final Button ichat = (Button) this.findViewById(R.id.btnQuickChat); 
     ichat.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 


      openConversation(); 


      } 


      private void openConversation() { 
       // TODO Auto-generated method stub 
        ParseQuery<ParseUser> query = ParseUser.getQuery(); 
        query.whereNotEqualTo("objectId", ParseUser.getCurrentUser() 
          .getObjectId()); 
         // users with Gender = currentUser.Looking_Gender 
         query.whereEqualTo("Gender", userLookingGender); 
         // users with Looking_Gender = currentUser.Gender 
          query.whereEqualTo("Looking_Gender", userGender); 
         query.setLimit(1); 
         query.whereEqualTo("ActivityName", activityName); 
         query.whereGreaterThanOrEqualTo("UserAge", minimumAge); 
         query.whereLessThanOrEqualTo("UserAge", maximumAge); 


        query.findInBackground(new FindCallback<ParseUser>() { 
         public void done(List<ParseUser> user, ParseException e) { 
           if (e == null) { 

            Intent intent = new Intent(getApplicationContext(), MessagingActivity1.class); 
            startService(serviceIntent); 
            intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId()); 
            startActivity(intent); 
           } else { 
            Toast.makeText(getApplicationContext(), 
             "Error finding that user", 
              Toast.LENGTH_SHORT).show(); 
           } 
          } 
         }); 
        } 
     }); 


} 



//show a loading spinner while the sinch client starts 
    private void showSpinner() { 
     progressDialog = new ProgressDialog(this); 
     progressDialog.setTitle("Loading"); 
     progressDialog.setMessage("Please wait..."); 
     progressDialog.show(); 

     receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Boolean success = intent.getBooleanExtra("success", false); 
       progressDialog.dismiss(); 
       if (!success) { 
        Toast.makeText(getApplicationContext(), "Messaging service failed to start", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }; 

     LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("com.dooba.beta.matchOptionActivity1")); 
    } 

    @Override 
    public void onResume() { 

     super.onResume(); 
    } 
} 

我相信在這部分發現錯誤:

query.findInBackground(new FindCallback<ParseUser>() { 
        public void done(List<ParseUser> user, ParseException e) { 
          if (e == null) { 

           Intent intent = new Intent(getApplicationContext(), MessagingActivity1.class); 
           startService(serviceIntent); 
           intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId()); 
           startActivity(intent); 
          } else { 
           Toast.makeText(getApplicationContext(), 
            "Error finding that user", 
             Toast.LENGTH_SHORT).show(); 
          } 
         } 
        }); 
       } 
    }); 

任何幫助將不勝感激。

我一直在努力解決它,真的很感謝支持。 在此先感謝

更新

10-09 18:27:08.450: E/AndroidRuntime(999): FATAL EXCEPTION: main 
10-09 18:27:08.450: E/AndroidRuntime(999): java.lang.ExceptionInInitializerError 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.client.ServiceFactory.createUserAgent(ServiceFactory.java:44) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.client.DefaultSinchClient.<init>(DefaultSinchClient.java:157) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.client.InternalSinchClientFactory.createSinchClient(InternalSinchClientFactory.java:14) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.DefaultSinchClientBuilder.build(DefaultSinchClientBuilder.java:95) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.dooba.beta.MessageService.startSinchClient(MessageService.java:56) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.dooba.beta.MessageService.onStartCommand(MessageService.java:40) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread.access$1900(ActivityThread.java:130) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.os.Looper.loop(Looper.java:137) 
10-09 18:27:08.450: E/AndroidRuntime(999): at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-09 18:27:08.450: E/AndroidRuntime(999): at dalvik.system.NativeStart.main(Native Method) 
10-09 18:27:08.450: E/AndroidRuntime(999): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load sinch-android-rtc: findLibrary returned null 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.Runtime.loadLibrary(Runtime.java:365) 
10-09 18:27:08.450: E/AndroidRuntime(999): at java.lang.System.loadLibrary(System.java:535) 
10-09 18:27:08.450: E/AndroidRuntime(999): at com.sinch.android.rtc.internal.natives.jni.UserAgentFactory.<clinit>(UserAgentFactory.java:9) 
+1

我沒有看到你已經初始化serviceIntent,也許它是空的,那NPE的起源? – marcinj 2014-10-09 18:00:27

+0

我把私人的意圖serviceIntent; – John 2014-10-09 18:04:39

+2

但您必須初始化它,而不僅僅是聲明 – Blackbelt 2014-10-09 18:05:29

回答

1

的問題是在這裏

Intent intent = new Intent(getApplicationContext(), MessagingActivity1.class); 
startService(serviceIntent); 
intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId()); 
startActivity(intent); 

您試圖啓動一個服務,但你傳遞給方法的意圖是永遠不會初始化。

如果你想開始一個ServiceActivity你必須創建兩個單獨Intent對象 - 一個被傳遞給startService方法,另一個用於startActivity

Intent serviceIntent = new Intent(getApplicationContext(), YourServiceName.class); 
startService(serviceIntent); 

Intent activityIntent = new Intent(getApplicationContext(), MessagingActivity1.class); 
startActivity(activityIntent); 
+0

感謝您的建議,是否有可能幫助我? – John 2014-10-09 20:34:40

+0

當然可以!看看我更新的評論:) – 2014-10-10 08:00:06

+1

但他傳遞serviceIntent startService,而不是意圖 – marcinj 2014-10-10 09:38:21