【发布时间】:2014-04-24 14:08:43
【问题描述】:
实验室遇到严重问题,而且我不是唯一一个。我的模拟器在所有 Facebook 示例应用程序中运行良好。 FacebookSDK 和 HelloFacebookSample 项目都可以正常工作。代码中的某些内容不正确。所有 xml 和清单编码都是正确的。我确信这是Java代码中的东西。它编译,提示登录,然后询问权限,然后崩溃。
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.Session.StatusCallback;
import com.facebook.model.GraphObject;
import com.facebook.SessionState;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
final TextView newsFeedTextView = (TextView) rootView
.findViewById(R.id.newsFeed);
StatusCallback mCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
/* make the API call */
new Request(session, "/GmitClubsandsocieties/feed", null,
HttpMethod.GET, new Request.Callback() {
@Override
public void onCompleted(Response response) {
/* check logcat for responce */
System.out.println(response);
newsFeedTextView
.setText(parseDataFromFQLResponse(response));
}
}).executeAsync();
}
}
};
Session.OpenRequest request = new Session.OpenRequest(getActivity());
// request.setPermissions(Arrays.asList("read_stream"));
request.setCallback(mCallback);
// get active session
Session mFacebookSession = Session.getActiveSession();
if (mFacebookSession == null || mFacebookSession.isClosed()) {
mFacebookSession = new Session(getActivity());
}
// mFacebookSession.openForRead(request);
mFacebookSession.openForRead(request);
return rootView;
}
}
private static String parseDataFromFQLResponse(Response response) {
StringBuilder responseText = new StringBuilder(" ");
try {
GraphObject go = response.getGraphObject();
JSONObject jso = go.getInnerJSONObject();
JSONArray arr = jso.getJSONArray( "data" );
for (int i = 0; i < (arr.length()); i++) {
JSONObject json_obj = arr.getJSONObject(i);
responseText.append(String.format("Message: %s\n\n",
json_obj.getString("message")));
}
} catch (Throwable t) {
t.printStackTrace();
}
return responseText.toString();
}
}
这是日志文件:
04-24 09:57:28.453: D/AndroidRuntime(2574): Shutting down VM
04-24 09:57:28.453: W/dalvikvm(2574): threadid=1: thread exiting with uncaught exception (group=0xb2ae0ba8)
04-24 09:57:28.513: E/AndroidRuntime(2574): FATAL EXCEPTION: main
04-24 09:57:28.513: E/AndroidRuntime(2574): Process: ie.gmit.facebooknewsfeed, PID: 2574
04-24 09:57:28.513: E/AndroidRuntime(2574): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {ie.gmit.facebooknewsfeed/ie.gmit.facebooknewsfeed.MainActivity}: java.lang.NullPointerException
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.ActivityThread.deliverResults(ActivityThread.java:3365)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.ActivityThread.access$1300(ActivityThread.java:135)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.os.Handler.dispatchMessage(Handler.java:102)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.os.Looper.loop(Looper.java:136)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-24 09:57:28.513: E/AndroidRuntime(2574): at java.lang.reflect.Method.invokeNative(Native Method)
04-24 09:57:28.513: E/AndroidRuntime(2574): at java.lang.reflect.Method.invoke(Method.java:515)
04-24 09:57:28.513: E/AndroidRuntime(2574): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-24 09:57:28.513: E/AndroidRuntime(2574): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-24 09:57:28.513: E/AndroidRuntime(2574): at dalvik.system.NativeStart.main(Native Method)
04-24 09:57:28.513: E/AndroidRuntime(2574): Caused by: java.lang.NullPointerException
04-24 09:57:28.513: E/AndroidRuntime(2574): at ie.gmit.facebooknewsfeed.MainActivity.onActivityResult(MainActivity.java:40)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.Activity.dispatchActivityResult(Activity.java:5423)
04-24 09:57:28.513: E/AndroidRuntime(2574): at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
04-24 09:57:28.513: E/AndroidRuntime(2574): ... 11 more
04-24 09:57:32.283: I/Process(2574): Sending signal. PID: 2574 SIG: 9
【问题讨论】:
-
第 5 行似乎抛出了一个 nullPointerException 错误。说“谁”字段中有一个空值。代码的哪一部分填充了
ResultInfo -
@Nathan 请问你所说的“代码的哪一部分填充”是什么意思
-
@Nathan 它是从这个页面提供的,facebook.com/GmitClubsandsocieties 这是大学实验室的结束。这是最后一点,我很想弄清楚。
-
@Nathan 对我不知道的问题的简短回答...刚刚注意到您问题中的“ResultInfo”,我想说它是填充它的 Facebook API 的一部分。会话。?
-
API 可以很好地将代码填充到
ResultInfo。这意味着您需要弄清楚何时在facebooknewsfeed.MainActivity中传递用户信息时检查 nullPointers。
标签: java android facebook feed