2013-12-08 37 views
0

我的问题:空指针

我有一个名为控制台的活性的片段活动是一个视图寻呼机机智H3 searate页面内。当我简单地查看页面时,它将正常加载,但随后我快速浏览页面,我收到了这个错误。

12-07 20:14:39.851: E/AndroidRuntime(24498): FATAL EXCEPTION: main 
12-07 20:14:39.851: E/AndroidRuntime(24498): java.lang.NullPointerException 
12-07 20:14:39.851: E/AndroidRuntime(24498): at trade.ly.tradely.ConsoleActivity$RemoteDataTask.onPostExecute(ConsoleActivity.java:145) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at trade.ly.tradely.ConsoleActivity$RemoteDataTask.onPostExecute(ConsoleActivity.java:1) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at android.os.AsyncTask.finish(AsyncTask.java:631) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at android.os.Looper.loop(Looper.java:137) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at android.app.ActivityThread.main(ActivityThread.java:5039) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at java.lang.reflect.Method.invokeNative(Native Method) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at java.lang.reflect.Method.invoke(Method.java:511) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-07 20:14:39.851: E/AndroidRuntime(24498): at dalvik.system.NativeStart.main(Native Method) 

这是我的控制台活动代码。

public class ConsoleActivity extends SherlockFragment { 

private ProfilePictureView userProfilePictureView; 
private TextView userNameView; 
private TextView userLocationView; 
ListView listview; 
List<ParseObject> ob; 
ListViewAdapter adapter; 
private List<UserPosts> userpostarraylist = null; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.activity_console, container, false); 

    userProfilePictureView = (ProfilePictureView) v.findViewById(R.id.userProfilePicture); 
    userNameView = (TextView) v.findViewById(R.id.userName); 
    userLocationView = (TextView) v.findViewById(R.id.userLocation); 

    SlidingLayer slidingLayer = (SlidingLayer) v.findViewById(R.id.slidingLayer1); 

    slidingLayer.setShadowWidthRes(R.dimen.shadow_width); 
    slidingLayer.setOffsetWidth(70); 
    slidingLayer.setShadowDrawable(R.drawable.sidebar_shadow); 
    slidingLayer.setStickTo(SlidingLayer.STICK_TO_RIGHT); 
    slidingLayer.setCloseOnTapEnabled(true); 

    Button newPage = (Button)v.findViewById(R.id.post_button); 
    newPage.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getActivity(), PostActivity.class); 
      startActivity(intent); 
     } 
    }); 


    Button logoutButton = (Button) v.findViewById(R.id.logout_button); 
    logoutButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onLogoutButtonClicked(); 
     } 
    }); 


// Fetch Facebook user info if the session is active 
     Session session = ParseFacebookUtils.getSession(); 
     if (session != null && session.isOpened()) { 
      makeMeRequest(); 
     } 

     return v; 
    } 


private class RemoteDataTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 


    } 

    protected Void doInBackground(Void... params) { 
     // Create the array 
     userpostarraylist = new ArrayList<UserPosts>(); 
     try { 
      ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("testData"); 

      // Restrict to cases where the author is the current user. 
      query.whereEqualTo("author", ParseUser.getCurrentUser()); 

      query.orderByDescending("createdAt"); 

      ob = query.find(); 
      for (ParseObject country : ob) { 
       ParseFile image = (ParseFile) country.get("Photo"); 

       UserPosts upost = new UserPosts(); 

       upost.setPrice((String) country.get("Price")); 
       upost.setDescription((String) country.get("Description")); 
       upost.setCategory((String) country.get("MainCat")); 
       upost.setSubCategory((String) country.get("SubCat")); 
       upost.setEmail((String) country.get("PEmail"));     
       upost.setName((String) country.get("PName")); 
       upost.setPNumber((String) country.get("PPhone")); 
       upost.setMeet((String) country.get("PMeet")); 
       upost.setPrice((String) country.get("Price")); 
       upost.setTitle((String) country.get("Title")); 
       upost.setId((String) country.getObjectId()); 
       upost.setPhone(image.getUrl()); 

       userpostarraylist.add(upost); 
      } 
     } catch (ParseException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     listview = (ListView) getActivity().findViewById(R.id.userpostlistview); 
     adapter = new ListViewAdapter(getActivity(), userpostarraylist); 
     listview.setAdapter(adapter); 
    } 
} 


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

     ParseUser currentUser = ParseUser.getCurrentUser(); 
     if (currentUser != null) { 
      // Check if the user is currently logged 
      // and show any cached content 
      updateViewsWithProfileInfo(); 
      //try this to kill the errors!!! 
      //new RemoteDataTask().execute(); 

     } else { 
      // If the user is not logged in, go to the 
      // activity showing the login view. 
      startLoginActivity(); 

     } 
    } 




    private void makeMeRequest() { 
     Request request = Request.newMeRequest(ParseFacebookUtils.getSession(), 
       new Request.GraphUserCallback() { 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          // Create a JSON object to hold the profile info 
          JSONObject userProfile = new JSONObject(); 
          try { 
           // Populate the JSON object 
           userProfile.put("facebookId", user.getId()); 
           userProfile.put("name", user.getName()); 
           if (user.getLocation().getProperty("name") != null) { 
            userProfile.put("location", (String) user 
              .getLocation().getProperty("name")); 
           } 


           // Save the user profile info in a user property 
           ParseUser currentUser = ParseUser 
             .getCurrentUser(); 
           currentUser.put("profile", userProfile); 
           currentUser.saveInBackground(); 

           // Show the user info 
           updateViewsWithProfileInfo(); 
          } catch (JSONException e) { 
           Log.d(TradelyApplication.TAG, 
             "Error parsing returned user data."); 
          } 

         } else if (response.getError() != null) { 
          if ((response.getError().getCategory() == FacebookRequestError.Category.AUTHENTICATION_RETRY) 
            || (response.getError().getCategory() == FacebookRequestError.Category.AUTHENTICATION_REOPEN_SESSION)) { 
           Log.d(TradelyApplication.TAG, 
             "The facebook session was invalidated."); 
           onLogoutButtonClicked(); 
          } else { 
           Log.d(TradelyApplication.TAG, 
             "Some other error: " 
               + response.getError() 
                 .getErrorMessage()); 
          } 
         } 
        } 
       }); 
     request.executeAsync(); 

    } 

    private void updateViewsWithProfileInfo() { 
     ParseUser currentUser = ParseUser.getCurrentUser(); 
     if (currentUser.get("profile") != null) { 
      JSONObject userProfile = currentUser.getJSONObject("profile"); 
      try { 
       if (userProfile.getString("facebookId") != null) { 
        String facebookId = userProfile.get("facebookId") 
          .toString(); 
        userProfilePictureView.setProfileId(facebookId); 
       } else { 
        // Show the default, blank user profile picture 
        userProfilePictureView.setProfileId(null); 
       } 
       if (userProfile.getString("name") != null) { 
        userNameView.setText(userProfile.getString("name")); 
       } else { 
        userNameView.setText(""); 
       } 
       if (userProfile.getString("location") != null) { 
        userLocationView.setText(userProfile.getString("location")); 
       } else { 
        userLocationView.setText(""); 
       } 

      } catch (JSONException e) { 
       Log.d(TradelyApplication.TAG, 
         "Error parsing saved user data."); 
      } 
        // This is where the listView data task is called 
      new RemoteDataTask().execute(); 
     } 
    } 

    private void onLogoutButtonClicked() { 
     // Log the user out 
     ParseUser.logOut(); 

     // Go to the login view 
     startLoginActivity(); 
    } 

    private void startLoginActivity() { 
     Intent intent = new Intent(getActivity(), MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 


} 
+0

上安装后调试器执行,看看哪些变量为空 –

+0

是什么类型你的ListViewAdapter适配器? –

回答

1

试试这个

初始化您ListviewOnCreate

listview = (ListView) v.findViewById(R.id.userpostlistview); 

,并尝试..

+0

我试过了,但似乎没有问题。我认为它必须做更多的事情找到适配器。你知道有什么方法在OnCreate中初始化适配器吗? – Derek

+0

@DerekSmith否它是正确的适配器初始化是正确的。 – Hariharan

+0

非常感谢您的帮助!事实证明你是对的,我只是没有删除我之前调用它的地方,所以它被覆盖。 – Derek