Ошибка onClick при передаче данных из jsonarray в табличное представление - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь передать данные из моего массива 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...