Использование Volley JSON с пользовательским адаптером Spinner - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть некоторые данные в базе данных mysql, которые я хочу получить, используя залп, чтобы заполнить мой счетчик.Я создал собственный класс адаптера спиннера, но, похоже, просто не знаю, как заставить его работать с Volley

Вот мой код

CustomSPinnerAdapter.java class

package com.example.drawerlayout;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class CustomSPinnerAdapter extends BaseAdapter {

    Activity activity;
    String[] data;
    LayoutInflater inflater;

    public CustomSPinnerAdapter(Activity activity, String[] data, LayoutInflater inflater) {
        this.activity = activity;
        this.data = data;
        this.inflater = inflater;
    }

    @Override
    public int getCount() {
        return data.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = inflater.inflate(R.layout.airtime_to_cash_spinner, null);
        TextView spinnerTitle = (TextView) v.findViewById(R.id.atc_spinner_title);
        spinnerTitle.setText(data[i]);
        return v;
    }
}

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

package com.example.drawerlayout;

public class Config {
    //JSON URL
    public static final String DATA_URL = "http://192.168.43.54/airtimeflip/n_providers";

    //Tags used in the JSON String
    public static final String TAG_PROVIDER = "service_provider";
    public static final String TAG_NUMBER = "number";
    public static final String TAG_PERCENTAGE = "percentage";

    //JSON array name
    public static final String JSON_ARRAY = "data";
}

FundActivity.java

package com.example.drawerlayout;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.navigation.NavigationView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FundActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, AdapterClickedInterface, View.OnClickListener, Spinner.OnItemSelectedListener  {

    private static final String TAG = "MainActivity";
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mToggle;
    private Toolbar mToolbar;
    private AppBarLayout actionLayout;
    private TextView custTitle, emailView, nameView;
    NavigationView navigationView;
    private LinearLayout layout;
    SessionManager sessionManager;
    private Button acBtn;
    private ImageButton info1, info2;
    List<Actions> actions;

    //Declaring an Spinner
    private Spinner spinner;

    //An ArrayList for Spinner Items
    private ArrayList<String> networks;

    //JSON Array
    private JSONArray result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fund);


        // SESSION MANAGER
        sessionManager = new SessionManager(this);
        sessionManager.checkLoggin();


        /*get state id*/
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close);
        mToolbar = (Toolbar) findViewById(R.id.nav_action);
        actionLayout = (AppBarLayout) findViewById(R.id.appbar);
        custTitle = (TextView) findViewById(R.id.toolbar_title);
        layout = (LinearLayout)findViewById(R.id.action_box);


        networks = new ArrayList<>();
        //Initializing Spinner
        spinner = (Spinner) findViewById(R.id.networks_spinner);

        //Adding an Item Selected Listener to our Spinner
        //As we have implemented the class Spinner.OnItemSelectedListener to this class iteself we are passing this to setOnItemSelectedListener
        spinner.setOnItemSelectedListener(this);




        // TITLE BAR
        custTitle.setText("Home");
        custTitle.setTextSize(20);
        custTitle.setTypeface(null, Typeface.BOLD);

        setSupportActionBar(mToolbar);
        mDrawerLayout.addDrawerListener(mToggle);
        mToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        getSupportActionBar().setElevation(0);



        // NAVIGATION VIEW
        navigationView = (NavigationView) findViewById(R.id.nav_drawer_layout);
        View headerView = navigationView.getHeaderView(0);
        nameView = (TextView) headerView.findViewById(R.id.username);
        emailView = (TextView) headerView.findViewById(R.id.email);
        setNavigationViewListener();
        setButtonOnclickListener();


        HashMap<String, String> user = sessionManager.getUserDetails();
        String username = user.get(sessionManager.NAME);
        String email = user.get(sessionManager.EMAIL);

        nameView.setText(username);
        emailView.setText(email);
    }

    private void setNavigationViewListener() {
        navigationView.setNavigationItemSelectedListener(this);
    }

    private void setButtonOnclickListener() {
//        acBtn.setOnClickListener(this);
    }





    private void getNetworkProviders(){
        StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.DATA_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            // get networks data from the database
                            JSONObject jsonObject = new JSONObject(response);
                            result = jsonObject.getJSONArray(Config.JSON_ARRAY);

                            getProviders(result);
                        } catch (JSONException e) {
                            e.printStackTrace();
                            Log.d(TAG, "onResponse: Clicked." + e.toString());
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(FundActivity.this, "Login Error! "+ error.toString(), Toast.LENGTH_SHORT).show();
                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }




    private void getProviders(JSONArray j){
        //Traversing through all the items in the json array
        for(int i=0;i<j.length();i++){
            try {
                //Getting json object
                JSONObject json = j.getJSONObject(i);

                //Adding the name of the student to array list
                networks.add(json.getString(Config.TAG_PROVIDER));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        //Setting adapter to show the items in the spinner
        CustomSPinnerAdapter sPinnerAdapter = new CustomSPinnerAdapter(this, networks);
        spinner.setAdapter(sPinnerAdapter );
    }






    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (mToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        try {
            switch (menuItem.getItemId()){
                case R.id.nav_logout:
                    sessionManager.logOut();
                    Log.d(TAG, "onNavigationItemSelected: logout");
            }
        } catch (Exception e) {
            Log.d(TAG, "onNavigationItemSelected: "+e.toString());
        }
        mDrawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }



    @Override
    public void onItemClicked(int postion) {
        final Intent intent;
        switch (postion){
            case 0:
                Toast.makeText(FundActivity.this, "Withdraw Fund", Toast.LENGTH_SHORT).show();
                break;

            case 1:
                intent =  new Intent(this, FundActivity.class);
                Toast.makeText(FundActivity.this, "Withdraw Fund", Toast.LENGTH_SHORT).show();
                break;

            case 2:
                Toast.makeText(FundActivity.this, "History", Toast.LENGTH_SHORT).show();
                break;

            default:
                Toast.makeText(FundActivity.this, "this is the default ", Toast.LENGTH_SHORT).show();
                break;

        }
    }

    @Override
    public void onClick(View v) {

    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
}
...