Как встроить авторизацию через вконтакте?
Суть в том что у меня уже есть готовая авторизация через вк и он работает! А как это всё дело вставить не в классы а в фрагменты? Вот как она выглядит: MainActivity.class
public class MainActivity extends AppCompatActivity {
private ListView listView;
ArrayList<String> arrayList = new ArrayList<>();
ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listeners);
VKSdk.login(this );
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>() {
@Override
public void onResult (VKAccessToken res) {
VKRequest vkRequest = new VKApiGroups().getById(VKParameters.from("group_ids", "199590682"));
vkRequest.executeWithListener(new VKRequest.VKRequestListener() {
/**
* Called if there were no HTTP or API errors, returns execution result.
*
* @param response response from VKRequest
*/
@Override
public void onComplete(VKResponse response) {
super.onComplete(response);
VKList vkList = (VKList) response.parsedModel;
try {
VKRequest vkRequest1 = new VKApiWall()
.get(VKParameters.from(VKApiConst.OWNER_ID, "-" + vkList.get(0).fields.getInt("id"), VKApiConst.COUNT, 100));
vkRequest1.executeWithListener(new VKRequest.VKRequestListener() {
/**
* Called if there were no HTTP or API errors, returns execution result.
*
* @param response response from VKRequest
*/
@Override
public void onComplete(VKResponse response) {
super.onComplete(response);
try {
JSONObject jsonObject = (JSONObject) response.json.get("response");
JSONArray jsonArray = (JSONArray) jsonObject.get("items");
for (int i = 0; i < jsonArray.length(); i++){
JSONObject post = (JSONObject) jsonArray.get(i);
arrayList.add(post.getString("text"));
}
arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
listView.setAdapter(arrayAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
@Override
public void onError(VKError error) {
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
})) {
super.onActivityResult(requestCode, resultCode, data);
}
}
}
Application .class
public class Application extends android.app.Application {
VKAccessTokenTracker vkAccessTokenTracker = new VKAccessTokenTracker() {
@Override
public void onVKAccessTokenChanged(@Nullable VKAccessToken oldToken, @Nullable VKAccessToken newToken) {
if(newToken == null){
Intent intent = new Intent(Application.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
};
@Override
public void onCreate() {
super.onCreate();
vkAccessTokenTracker.startTracking();
VKSdk.initialize(this);
}
}
Вот как выглядят фрагменты:
NewsFragment
public class NewsFragment extends Fragment {
private NewsViewModel newsViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
newsViewModel =
ViewModelProviders.of(this).get(NewsViewModel.class);
View root = inflater.inflate(R.layout.fragment_news, container, false);
final TextView textView = root.findViewById(R.id.listeners);
newsViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
}
NewsViewModel
public class NewsViewModel extends ViewModel {
private MutableLiveData<String> mText;
public NewsViewModel() {
mText = new MutableLiveData<>();
mText.setValue("На данный момент нет новостей.");
}
public LiveData<String> getText() {
return mText;
}
}