正在从Facebook检索好友列表,结果为空
我想列出的朋友谁是Facebook联系人,也有应用程序。它已经显示了好几次,但通常不起作用 我不知道为什么。当我运行调试器时,它会告诉我在以下行中有一个NullPointerException错误:正在从Facebook检索好友列表,结果为空,facebook,Facebook,我想列出的朋友谁是Facebook联系人,也有应用程序。它已经显示了好几次,但通常不起作用 我不知道为什么。当我运行调试器时,它会告诉我在以下行中有一个NullPointerException错误: friendslist = new JSONArray(jsondata); 我已经做了很多努力来解决这个问题,所以如果你能让我知道我的代码哪里出错了,我将非常感激 我已将重要页面包括在下面: 后勤活动: package com.phinder.phinder; import a
friendslist = new JSONArray(jsondata);
我已经做了很多努力来解决这个问题,所以如果你能让我知道我的代码哪里出错了,我将非常感激
我已将重要页面包括在下面:
后勤活动:
package com.phinder.phinder;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.HttpMethod;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.phinder.phinder.utils.ApiServices;
import com.phinder.phinder.utils.Constants;
import com.phinder.phinder.utils.MyLinks;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphRequestAsyncTask;
import com.facebook.GraphResponse;
import com.facebook.HttpMethod;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
public class LoginActivity extends AppCompatActivity /*implements View.OnClickListener*/ {
private final int REQUEST_READ_WRITE_PERMISSION = 3, REQUEST_CAMERA_PERMISSION = 4;
CallbackManager callbackManager;
AccessToken accessToken;
Retrofit retrofit;
ApiServices apiServices;
AppCompatActivity activity;
SharedPreferences.Editor editor;
LoginButton loginButton;
Toolbar toolbar;
private String profileUri = "", id = "", name = "", email = "";
private Constants constants;
private MyLinks myLinks;
private ProgressDialog progressDialog;
private boolean isReadWritePermitted = false, isCameraPermitted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
facebookSDKInitialize();
setContentView(R.layout.activity_login);
Constants.loginSharedPreferences = getSharedPreferences(Constants.LoginPref, MODE_PRIVATE);
activity = LoginActivity.this;
myLinks = new MyLinks(activity);
constants = new Constants();
editor = Constants.loginSharedPreferences.edit();
toolbar = (Toolbar) findViewById(R.id.toolbar_activity_login);
setSupportActionBar(toolbar);
printKeyHash();
List<String> permission = new ArrayList<String>();
permission.add("email");
permission.add("public_profile");
permission.add("user_location");
permission.add("user_birthday");
permission.add("user_friends");
progressDialog = new ProgressDialog(activity);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();
retrofit = new Retrofit.Builder()
.baseUrl(myLinks.DEFAULT_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
apiServices = retrofit.create(ApiServices.class);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(permission);
getLoginDetails(loginButton);
}
private void requestPermission() {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
isReadWritePermitted = true;
} else {
// Show rationale and request permission.
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_WRITE_PERMISSION);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_READ_WRITE_PERMISSION) {
if (permissions.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
isReadWritePermitted = true;
getLoginDetails(loginButton);
} else {
isReadWritePermitted = false;
}
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void facebookSDKInitialize() {
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
}
private void getLoginDetails(final LoginButton loginButton) {
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
loginButton.setVisibility(View.INVISIBLE);
progressDialog.show();
Log.d("msg", "Facebook");
accessToken = AccessToken.getCurrentAccessToken();
SharedPreferences.Editor editor = Constants.loginSharedPreferences
.edit();
editor.putString(constants.LoginId, accessToken.getUserId());
editor.apply();
Log.d("msg", "fbid : " + accessToken.getUserId());
onSuccessFullLogIn(accessToken);
GraphRequestAsyncTask graphRequestAsyncTask = new GraphRequest(
loginResult.getAccessToken(),
//AccessToken.getCurrentAccessToken(),
"/me/friends",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
try {
JSONArray rawName = response.getJSONObject().getJSONArray("data");
intent.putExtra("jsondata", rawName.toString());
startActivity(intent);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
).executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
}
public void onSuccessFullLogIn(final AccessToken accessToken) {
Bundle params = new Bundle();
params.putString("fields", "id,name,location,email,picture.type(large)");
new GraphRequest(accessToken, "me", params, HttpMethod.GET, new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
Log.d("msg", "Fb data1 : " + response.toString() + "");
JSONObject data = response.getJSONObject();
Log.d("msg", "Fb data : " + data.toString() + "");
SharedPreferences.Editor editor = Constants.loginSharedPreferences
.edit();
if (data.has("picture")) {
profileUri = data.getJSONObject("picture")
.getJSONObject("data")
.getString("url");
if (profileUri.startsWith("http://")
|| profileUri
.startsWith("https://")) {
profileUri = profileUri.replace(
"http://", "").trim();
profileUri = profileUri.replace(
"https://", "").trim();
}
editor.putString(constants.LoginImage, profileUri);
}
if (data.has("name")) {
editor.putString(constants.LoginName, data.getString("name"));
}
//if (data.has("email")) {
// Log.d("email", data.getString("email"));
// editor.putString(constants.LoginEmail, data.getString("email"));
//}
//if (data.has("location")) {
// editor.putString("city", data
// .getJSONObject("location")
// .getString("name"));
//}
editor.putBoolean(constants.LoginStatus, true);
editor.apply();
LoginManager.getInstance().logOut();
} catch (Exception e) {
e.printStackTrace();
} finally {
finish();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
progressDialog.dismiss();
// final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this);
// progressDialog.show();
// Call<ResponseBody> call = apiServices.socialCall(Constants.loginSharedPreferences.getString(constants.LoginName, ""),
// Constants.loginSharedPreferences.getString(constants.LoginId, ""),
// Constants.loginSharedPreferences.getString(constants.LoginEmail, ""),
// Constants.loginSharedPreferences.getString(constants.LoginImage, "")
// );
//
// call.enqueue(new Callback<ResponseBody>() {
// @Override
// public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
// try {
//
// String result = response.body().string();
//
// Log.d("msg", "Result : " + result);
//
//
// JSONObject jsonObject = new JSONObject(result);
//// progressDialog.dismiss();
//
//
// if (jsonObject != null && jsonObject.length() > 0) {
//
// JSONArray jsonArray = jsonObject.getJSONArray("response");
//
// Log.d("msg", "Json : " + jsonArray.toString());
//
// if (jsonArray != null && jsonArray.length() > 0) {
//
// for (int i = 0; i < jsonArray.length(); i++) {
//
// JSONObject jsonObject1 = jsonArray.getJSONObject(i);
//
// String status = jsonObject1.getString("status");
// String id = jsonObject1.getString("id");
//
// SharedPreferences.Editor editor = Constants.loginSharedPreferences.edit();
// editor.putString(constants.UserId, id);
// editor.apply();
//
// if (status.equals("one") || status.equals("zero")) {
// startActivity(new Intent(activity, MainActivity.class));
// finish();
//
// } else {
// Toast.makeText(activity, "Invalid login", Toast.LENGTH_LONG).show();
// }
// }
// }
// }
//
// } catch (IOException e) {
// e.getStackTrace();
//
// Log.d("msg", "IO " + e.getMessage());
// progressDialog.dismiss();
// } catch (JSONException e) {
//
// e.printStackTrace();
// Log.d("msg", "JSON " + e.getMessage());
// progressDialog.dismiss();
// }
// }
//
// @Override
// public void onFailure(Call<ResponseBody> call, Throwable t) {
// Log.d("msg", "JSON " + t.getMessage());
//
// progressDialog.dismiss();
// }
// });
}
}
}
}).executeAsync();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
// Log.d("data",data.toString());
}
@Override
protected void onResume() {
super.onResume();
AppEventsLogger.activateApp(LoginActivity.this, "369622066719726");
}
@Override
protected void onPause() {
super.onPause();
AppEventsLogger.deactivateApp(LoginActivity.this, "369622066719726");
}
public String printKeyHash() {
PackageInfo packageInfo;
String key = null;
try {
//getting application package name, as defined in manifest
String packageName = getApplicationContext().getPackageName();
//Retriving package info
packageInfo = getPackageManager().getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);
Log.d("Package Name=", getApplicationContext().getPackageName());
for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
key = new String(Base64.encode(md.digest(), 0));
// String key = new String(Base64.encodeBytes(md.digest()));
Log.d("Key Hash=", key);
// ST4ot689mPBUodJzQxMIutXIkKw=
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.d("No such an algorithm", e.toString());
} catch (Exception e) {
Log.d("Exception", e.toString());
}
return key;
}
}
package com.phinder.phinder;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ImageView imageView_picture_profile;
TextView textview_nameprofile,textview_emailprofile;
public com.phinder.phinder.utils.Constants constants;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// User Information
constants = new com.phinder.phinder.utils.Constants();
imageView_picture_profile = (ImageView)findViewById(R.id.imageView_picture_profile);
//textview_emailprofile = (TextView) findViewById(R.id.textview_emailprofile);
textview_nameprofile = (TextView)findViewById(R.id.textview_nameprofile);
//textview_emailprofile.setText(constants.loginSharedPreferences.getString(constants.LoginEmail, ""));
textview_nameprofile.setText(constants.loginSharedPreferences.getString(constants.LoginName, ""));
try {
Glide.with(getApplicationContext())
.load("http://" + constants.loginSharedPreferences.getString(constants.LoginImage, ""))
.placeholder(R.mipmap.ic_launcher)
.thumbnail(.1F)
.error(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(imageView_picture_profile);
} catch (Exception e) {
e.getStackTrace();
Log.d("msg", "Photo " + e.getMessage());
}
//ListView Facebook Friends
Intent intent = getIntent();
String jsondata = intent.getStringExtra("jsondata");
JSONArray friendslist;
ArrayList<String> friends = new ArrayList<String>();
try {
friendslist = new JSONArray(jsondata);
for (int l=0; l < friendslist.length(); l++) {
friends.add(friendslist.getJSONObject(l).getString("name"));
}
} catch (JSONException e) {
e.printStackTrace();
}
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listview, friends); // simple textview for list item
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
}
}
package com.phinder.phinder;
导入android.Manifest;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.content.pm.PackageInfo;
导入android.content.pm.PackageManager;
导入android.content.pm.Signature;
导入android.os.Bundle;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.util.Base64;
导入android.util.Log;
导入android.view.view;
导入com.facebook.AccessToken;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.FacebookSdk;
导入com.facebook.GraphRequest;
导入com.facebook.GraphResponse;
导入com.facebook.HttpMethod;
导入com.facebook.appevents.AppEventsLogger;
导入com.facebook.login.LoginManager;
导入com.facebook.login.LoginResult;
导入com.facebook.login.widget.LoginButton;
导入com.phinder.phinder.utils.ApiServices;
导入com.phinder.phinder.utils.Constants;
导入com.phinder.phinder.utils.myLink;
导入org.json.JSONObject;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.concurrent.TimeUnit;
导入okhttp3.OkHttpClient;
进口改装2.改装;
进口改装2.converter.gson.GsonConverterFactory;
导入android.content.Intent;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入com.facebook.AccessToken;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.FacebookSdk;
导入com.facebook.GraphRequest;
导入com.facebook.GraphRequestAsyncTask;
导入com.facebook.GraphResponse;
导入com.facebook.HttpMethod;
导入com.facebook.appevents.AppEventsLogger;
导入com.facebook.login.LoginManager;
导入com.facebook.login.LoginResult;
导入com.facebook.login.widget.LoginButton;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.array;
公共类LoginActivity扩展了AppCompatActivity/*实现了View.OnClickListener*/{
私人最终int请求\读\写\权限=3,请求\摄像机\权限=4;
CallbackManager CallbackManager;
AccessToken AccessToken;
改造;
APIs服务APIs服务;
应用程序活动;
SharedReferences.Editor;
登录按钮登录按钮;
工具栏;
私有字符串profileUri=“”,id=“”,name=“”,email=“”;
私有常数;
私人MyLinks MyLinks;
私有进程对话;
私有布尔值IsReadWritePermitt=false,IsCameraPermitt=false;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
facebook初始化();
setContentView(R.layout.activity\u登录);
Constants.LoginSharedReferences=GetSharedReferences(Constants.LoginPref,模式\ U私有);
活动=LoginActivity.this;
MyLink=新的MyLink(活动);
常数=新常数();
editor=Constants.loginSharedReferences.edit();
工具栏=(工具栏)findViewById(R.id.toolbar\u活动\u登录);
设置支持操作栏(工具栏);
printKeyHash();
列表权限=新建ArrayList();
许可。添加(“电子邮件”);
权限。添加(“公共_档案”);
权限。添加(“用户位置”);
权限。添加(“用户生日”);
权限。添加(“用户朋友”);
progressDialog=新建progressDialog(活动);
OkHttpClient OkHttpClient=新建OkHttpClient.Builder()
.connectTimeout(30,时间单位为秒)
.readTimeout(30,时间单位为秒)
.writeTimeout(30,时间单位。秒)
.build();
改装=新改装.Builder()
.baseUrl(myLinks.DEFAULT\u URL)
.客户(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
apiServices=reformation.create(apiServices.class);
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
loginButton.setReadPermissions(权限);
获取登录详细信息(登录按钮);
}
私有void requestPermission(){
if(ContextCompat.checkSelfPermission(活动、清单、权限、写入\外部\存储)
==已授予PackageManager.PERMISSION\u权限||
ContextCompat.checkSelfPermission(活动、清单、权限、读取\u外部\u存储)
==PackageManager.权限(已授予){
isReadWritePermitt=true;
}否则{
//说明理由并请求许可。
ActivityCompat.requestPermissions(活动,新字符串[]{Manifest.permission.WRITE_外部_存储,
Manifest.permission.READ\u EXTERNAL\u STORAGE},REQUEST\u READ\u WRITE\u permission);
}
}
@凌驾
public void onRequestPermissionsResult(int-requestCode、字符串[]权限、int[]grantResults){
if(requestCode==请求\读\写\权限){
如果(permissions.length>0){
if(grantResults[0]==已授予PackageManager.权限){
我
onSuccessFullLogIn(accessToken);