Я пытаюсь передать данные из моего массива json в tableview (единственный найденный мной пример, похожий на мой по сравнению с listview), и мое приложение всегда вылетает, когда я всегда нажимаю кнопку показа иЯ потерян из-за этого.
вот мой код:
мой код для получения данных от jsonarray:
public class bTSQLClient extends AppCompatActivity {
////for populating the table
private final Context context;
private SimpleTableDataAdapter adapter;
TableView<String[]> tableView;
TableHelper tableHelper;
//getting the current sysID use in protected params
private static final String KEY_SYS_ID = "sys_id";
private int sys_Id = SharedPrefManager.getInstance(this).getUserid();
//View Branch
private static final String KEY_VB_ID = "branchid";
private static final String KEY_VB_USER = "username";
private static final String KEY_VB_PASSWORD = "password";
private static final String KEY_VB_NAME = "branchname";
private static final String KEY_VB_SYSID = "sys_id";
private static final String KEY_VB_CREATED = "created";
private static final String KEY_VB_UT = "user_type";
private int viewBranchID;
private String viewBranchUser;
private String viewBranchPassword;
private String viewBranchName;
private int viewBranchSYSID;
private int viewBranchCreated;
private String viewBranchUT;
//for populating the table
public bTSQLClient(Context context) {
this.context = context;
}
/**
* get Branch Data Operation table populate
*/
public void retrieve(final TableView tableView){
final ArrayList<branchlist> branchList = new ArrayList<>();
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,
Constants.viewbranches_url, null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
JSONObject jsonObject;
branchlist b;
try
{
for (int i = 0; i < response.length(); i++)
{
jsonObject = response.getJSONObject(i);
//viewBranchID = jsonObject.getInt(KEY_VB_ID);
viewBranchUser = jsonObject.getString(KEY_VB_USER);
//viewBranchPassword = jsonObject.getString(KEY_VB_PASSWORD);
viewBranchName = jsonObject.getString(KEY_VB_NAME);
//viewBranchSYSID = jsonObject.getInt(KEY_VB_SYSID);
//viewBranchCreated = jsonObject.getInt(KEY_VB_CREATED);
//viewBranchUT = jsonObject.getString(KEY_VB_UT);
b = new branchlist();
//b.setBranchid(viewBranchID);
b.setUsername(viewBranchUser);
//b.setPassword(viewBranchPassword);
b.setBranchname(viewBranchName);
//b.setSys_id(viewBranchSYSID);
//b.setCreated(viewBranchCreated);
//b.setUser_type(viewBranchUT);
branchList.add(b);
}
//set to table view
adapter = new SimpleTableDataAdapter(context,new TableHelper(context).returnBranchViewArray(branchList));
tableView.setDataAdapter(adapter);
} catch (JSONException e)
{
//e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
Log.e ( "response", "" + response );
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
Log.e ( "response", "" + error );
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put(KEY_SYS_ID, String.valueOf(sys_Id));
return params;
}
};
RequestHandler.getInstance(this).addToRequestQueue(jsonArrayRequest);
}
}
Вот класс TableHelper
public class TableHelper {
Context context;
private String[] branchViewHeader = {"Branch Name", "Username"};
private String[][] branchView;
public TableHelper(Context context){
this.context = context;
}
public String[] getBranchViewHeader()
{
return branchViewHeader;
}
public String[][] returnBranchViewArray(ArrayList<branchlist> branchList)
{
branchView = new String[branchList.size()][2];
branchlist b;
for(int i = 0; i<branchList.size();i++){
b = branchList.get(i);
branchView[i][0]=b.getBranchname();
branchView[i][1]=b.getUsername();
}
return branchView;
}
}
класс списка филиалов
public class branchlist {
private int branchid;
private String username;
private String password;
private String branchname;
private int sys_id;
private int created;
private String user_type;
public int getBranchid(){
return branchid;
}
public void setBranchid(int branchid){
this.branchid = branchid;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getBranchname(){
return branchname;
}
public void setBranchname(String branchname){
this.branchname = branchname;
}
public int getSys_id(){
return sys_id;
}
public void setSys_id(int sys_id){
this.sys_id = sys_id;
}
public int getCreated(){
return created;
}
public void setCreated(int created){
this.created = created;
}
public String getUser_type(){
return user_type;
}
public void setUser_type(String user_type){
this.user_type = user_type;
}
public String toString(){
return branchname;
}
}
код ереси для ветви (код, который передает bTSQLClient)
public class branch extends AppCompatActivity {
////for populating the table
private SimpleTableDataAdapter adapter;
TableView<String[]> tableView;
TableHelper tableHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_branch);
if (!SharedPrefManager.getInstance(this).isLoggedIn()) {
finish();
startActivity(new Intent(this, login.class));
return;
}
//for populating table
tableHelper = new TableHelper(this);
tableView = (TableView<String[]>) findViewById(R.id.tableView);
tableView.setColumnCount(2);
tableView.setHeaderBackgroundColor(Color.parseColor("#2ecc71"));
tableView.setHeaderAdapter(new SimpleTableHeaderAdapter(this,tableHelper.getBranchViewHeader()));
}
/**
* Show populated Table
*/
public void onTableshow(View view){ // The Error is right here (bTSQLClient is the above code)
new bTSQLClient(branch.this).retrieve(tableView);
}
/**
* goto Popup on Add Branch Account
*/
public void onAddBranch(View view){
startActivity(new Intent(branch.this,popup_addbranch.class));
}
/**
* Menu Signout
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.menuLogout:
SharedPrefManager.getInstance(this).isLoggedOut();
finish();
startActivity(new Intent(this, login.class));
break;
}
return true;
}
/**
* Back to dashboard
*/
public void onBack(View view) {
startActivity(new Intent(branch.this, dashboard.class));
}
}
и вот мой ответ почтальонадля моего php-кода:
[
{
"branchid": 12,
"username": "king",
"password": "202cb962ac59075b964b07152d234b70",
"branchname": "123branch",
"sys_id": 8,
"created": "2019-10-28 20:45:08",
"user_type": "Branch"
},
{
"branchid": 13,
"username": "makoy",
"password": "bda639c314e39023789c37d7a07469f9",
"branchname": "makoy",
"sys_id": 8,
"created": "2019-10-28 20:50:41",
"user_type": "Branch"
},
{
"branchid": 14,
"username": "foodbranch",
"password": "202cb962ac59075b964b07152d234b70",
"branchname": "foodbranch",
"sys_id": 8,
"created": "2019-10-28 22:01:59",
"user_type": "Branch"
},
{
"branchid": 15,
"username": "081nao397",
"password": "7815696ecbf1c96e6894b779456d330e",
"branchname": "testingbranchname",
"sys_id": 8,
"created": "2019-11-08 08:21:01",
"user_type": "Branch"
},
{
"branchid": 16,
"username": "testing101",
"password": "7815696ecbf1c96e6894b779456d330e",
"branchname": "rest",
"sys_id": 8,
"created": "2019-11-08 08:28:55",
"user_type": "Branch"
}
]
Я думаю, что я наконец-то близок к решению этой проблемы, так как мне удалось заставить часть базы данных показывать правильный массив (результат - результат почтальона, который я разместил выше)
XML-коды
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".main.Functions.dash_branch.branch">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btnBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="30sp"
android:layout_marginTop="30sp"
android:onClick="onBack"
android:padding="10sp"
android:text="Back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.008"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"></Button>
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginTop="30sp"
android:layout_marginRight="30sp"
android:onClick="onAddBranch"
android:padding="10sp"
android:text="+"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.008"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"></Button>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutviewbranch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<de.codecrafters.tableview.TableView
android:id="@+id/tableView"
android:layout_width="wrap_content"
android:layout_height="450sp"
app:tableView_columnCount="2">
</de.codecrafters.tableview.TableView>
</RelativeLayout>
<Button
android:layout_marginTop="20sp"
android:layout_gravity="center"
android:onClick="onTableshow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show">
</Button>
</LinearLayout>
Ошибка Logcat
FATAL EXCEPTION: main
Process: com.example.sample1myapp, PID: 25355
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context
android.content.Context.getApplicationContext()' on a null object
reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:118)
at com.example.sample1myapp.System.RequestHandler.getRequestQueue(RequestHandler.java:30)
at com.example.sample1myapp.System.RequestHandler.<init>(RequestHandler.java:16)
at com.example.sample1myapp.System.RequestHandler.getInstance(RequestHandler.java:21)
at com.example.sample1myapp.main.Functions.dash_branch.bTSQLClient.retrieve(bTSQLClient.java:146)
at com.example.sample1myapp.main.Functions.dash_branch.branch.onTableshow(branch.java:78)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)