Android Volley Request - PullRequest
       6

Android Volley Request

0 голосов
/ 02 мая 2018

Я пытаюсь создать приложение, которое будет получать некоторую информацию с сервера, чтобы я мог отобразить ее пользователю.

Мне сказали проверить залп как способ сделать это.

Я пытаюсь сделать это во фрагменте, и выполняю только одно действие (Main_Activity) и просто заменяю фрагменты по мере необходимости.

В моем фрагменте логина у меня есть этот код:

public class loginFragment extends Fragment {

//Local Vars
private boolean loginCheck = false;

//required constructor
public loginFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_login, container, false);
}

//When login button is clicked, this method is called
private void login(View view) {
    String username;
    String password;

    username = getView().findViewById(R.id.enteredUsername).toString();
    password = getView().findViewById(R.id.enteredPassword).toString();





    final ArrayList<String> info = new ArrayList<>();

    String[] unameSeparated = new String[username.length()];
    unameSeparated = username.split("(?!^)");

    String startUrl = "https://us.api.battle.net/d3/profile/";
    String uname = "";
    String APIKey = "/?(pretend this is my API key)";

    //Separating the username into the parts needed for sending request
    for (int i = 0; i < unameSeparated.length; i++) {
        if ((unameSeparated[i].equals("#"))) {
            //Replacing # with '%23'
            uname += "%23";
        } else {
            uname += unameSeparated[i];
        }
    }

    String url = startUrl + uname+ APIKey;

    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(getActivity());

    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    info.add(response);
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });

    // Add the request to the RequestQueue.
    queue.add(stringRequest);

}

public boolean isLoggedIn() {
    return loginCheck;
}



}

Поэтому, когда пользователь вводит свое имя пользователя и нажимает кнопку входа, он должен отправить запрос на сервер, получить свои данные и поместить их в массив (я собираюсь изменить его, чтобы позже поместить в файл). Я думаю, или даже просто переменная)

То, как это настроено в данный момент, когда я запускаю его, я получаю сообщение об ошибке, когда нажимаю кнопку входа в систему, и он говорит:

04-28 18:55:40.358 6224-6224/com.hfad.diablo3assistant E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.hfad.diablo3assistant, PID: 6224
                                                                     java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
                                                                         at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:394)
                                                                         at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:441)
                                                                         at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:432)
                                                                         at com.hfad.diablo3assistant.MainActivity.swapFragment(MainActivity.java:76)
                                                                         at com.hfad.diablo3assistant.MainActivity.onOptionsItemSelected(MainActivity.java:48)
                                                                         at android.app.Activity.onMenuItemSelected(Activity.java:3450)
                                                                         at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:368)
                                                                         at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
                                                                         at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
                                                                         at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
                                                                         at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:65)
                                                                         at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:202)
                                                                         at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:780)
                                                                         at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
                                                                         at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
                                                                         at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
                                                                         at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:127)
                                                                         at android.widget.AdapterView.performItemClick(AdapterView.java:318)
                                                                         at android.widget.AbsListView.performItemClick(AbsListView.java:1158)
                                                                         at android.widget.AbsListView$PerformClick.run(AbsListView.java:3127)
                                                                         at android.widget.AbsListView$3.run(AbsListView.java:4042)
                                                                         at android.os.Handler.handleCallback(Handler.java:790)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                         at android.os.Looper.loop(Looper.java:164)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Код из основного вида деятельности для получения выбранных пунктов меню:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int item_id = item.getItemId();
    switch (item_id) {
        case R.id.accDetails:
            swapFragment(item_id);
            return true;
        case R.id.personalProfileLookup:
            swapFragment(item_id);
            return true;
        case R.id.favoriteCharacters:
            swapFragment(item_id);
            return true;
        case R.id.friendProfileLookup:
            swapFragment(item_id);
            return true;
        case R.id.tipsAndTricks:
            swapFragment(item_id);
            return true;
    }

    return false;
}

Код из основного действия для обмена фрагментами:

private void swapFragment(int fragmentID){

    TextView tracker = (TextView) findViewById(R.id.currentFragDisplay);

    Fragment fragment = null;
    if(fragmentID == R.id.personalProfileLookup) {
        tracker.setText("My Profile");
        fragment = new Personal_Profile_Fragment();
    } else if(fragmentID == R.id.favoriteCharacters) {
        tracker.setText("Favorite Characters");
        fragment = new Favorite_Characters_Fragment();
    } else if(fragmentID == R.id.friendProfileLookup) {
        tracker.setText("Friend Lookup");
        fragment = new Friend_Profile_Fragment();
    } else if(fragmentID == R.id.tipsAndTricks) {
        tracker.setText("Tips and Tricks");
        fragment = new TipsandTricks_Fragment();
    } else if(fragmentID == R.id.accDetails) {
        tracker.setText("Log In");
        fragment = new loginFragment();
    }


    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.fragmentContainer, fragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

}
...