正在从Facebook检索好友列表,结果为空

正在从Facebook检索好友列表,结果为空,facebook,Facebook,我想列出的朋友谁是Facebook联系人,也有应用程序。它已经显示了好几次,但通常不起作用 我不知道为什么。当我运行调试器时,它会告诉我在以下行中有一个NullPointerException错误: friendslist = new JSONArray(jsondata); 我已经做了很多努力来解决这个问题,所以如果你能让我知道我的代码哪里出错了,我将非常感激 我已将重要页面包括在下面: 后勤活动: package com.phinder.phinder; import a

我想列出的朋友谁是Facebook联系人,也有应用程序。它已经显示了好几次,但通常不起作用

我不知道为什么。当我运行调试器时,它会告诉我在以下行中有一个NullPointerException错误:

        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);