Java 将数据从jsonarray传递到表视图时出现onClick错误
我试图将数据从json数组传递到tableview(这是我发现的唯一一个与listview类似的示例),当我总是单击我的show按钮时,我的应用程序总是崩溃,我因此而迷路 这是我的密码: 我从jsonarray获取数据的代码:Java 将数据从jsonarray传递到表视图时出现onClick错误,java,android,json,phpmyadmin,tableview,Java,Android,Json,Phpmyadmin,Tableview,我试图将数据从json数组传递到tableview(这是我发现的唯一一个与listview类似的示例),当我总是单击我的show按钮时,我的应用程序总是崩溃,我因此而迷路 这是我的密码: 我从jsonarray获取数据的代码: public class bTSQLClient extends AppCompatActivity { ////for populating the table private final Context context; private SimpleTableData
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);
}
}
}
此处是我的分支代码(bTSQLClient将传递给的代码)
我想我终于接近解决这个问题了,因为我成功地使数据库部分显示了一个正确的数组(结果是我上面发布的postman结果)
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)
致命异常:main
进程:com.example.sample1myapp,PID:25355
java.lang.IllegalStateException:无法为android执行方法:onClick
在androidx.appcompat.app.appcompativiewInflater$DeclaredOnClickListener.onClick(appcompativiewInflater.java:402)
在android.view.view.performClick上(view.java:7125)
在android.view.view.performClickInternal(view.java:7102)
在android.view.view.access$3500(view.java:801)
在android.view.view$PerformClick.run(view.java:27336)
位于android.os.Handler.handleCallback(Handler.java:883)
位于android.os.Handler.dispatchMessage(Handler.java:100)
位于android.os.Looper.loop(Looper.java:214)
位于android.app.ActivityThread.main(ActivityThread.java:7356)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Method.invoke(本机方法)
在androidx.appcompat.app.appcompativiewInflater$DeclaredOnClickListener.onClick(appcompativiewInflater.java:397)
在android.view.view.performClick上(view.java:7125)
在android.view.view.performClickInternal(view.java:7102)
在android.view.view.access$3500(view.java:801)
在android.view.view$PerformClick.run(view.java:27336)
位于android.os.Handler.handleCallback(Handler.java:883)
位于android.os.Handler.dispatchMessage(Handler.java:100)
位于android.os.Looper.loop(Looper.java:214)
位于android.app.ActivityThread.main(ActivityThread.java:7356)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
原因:java.lang.NullPointerException:尝试调用虚拟方法“android.content.Context”
空对象上的android.content.Context.getApplicationContext()
参考
位于android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:118)
位于com.example.sample1myapp.System.RequestHandler.getRequestQueue(RequestHandler.java:30)
位于com.example.sample1myapp.System.RequestHandler.(RequestHandler.java:16)
位于com.example.sample1myapp.System.RequestHandler.getInstance(RequestHandler.java:21)
位于com.example.sample1myapp.main.Functions.dash_branch.bTSQLClient.retrieve(bTSQLClient.java:146)
位于com.example.sample1myapp.main.Functions.dash_branch.branch.onTableshow(branch.java:78)
位于java.lang.reflect.Method.invoke(本机方法)
在androidx.appcompat.app.appcompativiewInflater$DeclaredOnClickListener.onClick(appcompativiewInflater.java:397)
在android.view.view.performClick上(view.java:7125)
在android.view.view.performClickInternal(view.java:7102)
在android.view.view.access$3500(view.java:801)
在android.view.view$PerformClick.run(view.java:27336)
位于android.os.Handler.handleCallback(Handler.java:883)
位于android.os.Handler.dispatchMessage(Handler.java:100)
位于android.os.Looper.loop(Looper.java:214)
位于android.app.ActivityThread.main(ActivityThread.java:7356)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
请在问题中添加崩溃日志(错误)完成!对不起,先生,我忘了添加您的显示按钮在哪里?并发布您的xml文件plz!public void onTableshow是我的show按钮的onClick监听器sir:D给我一点时间sir我会编辑它并添加xml我忘了添加TableHelper类和branclist类,抱歉伙计们,我现在更新了它!
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));
}
}
[
{
"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 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>
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)