У меня есть некоторые данные в базе данных 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) {
}
}