Я пытаюсь загрузить свой просмотрщик данных с php. Но по неизвестной причине он не загружает никаких данных. Я использовал этот же код для других действий, он отлично работает для этого, но для этого действия он остается пустым. Я проверил мой PHP-файл, он работает нормально.
Вот мой код для активности:
public class Match_scoring extends AppCompatActivity implements TeamAdapter.onItemClickListener {
public static String URL_data;
public static String p_id;
public static String p_name;
TeamAdapter adapter;
EditText editText;
List<TeamItems> list_items;
RecyclerView recyclerView;
Button subs;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_match_scoring);
URL_data = "http://prasaurus.com/trial_db_php/tbl_show_201_0_data.php";
tv = (TextView)findViewById(R.id.url);
tv.setText(URL_data);
editText = (EditText)findViewById(R.id.mSearch_match);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
filter(s.toString());
}
});
recyclerView = (RecyclerView)findViewById(R.id.total_players_recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
list_items = new ArrayList<>();
adapter = new TeamAdapter(list_items,getApplicationContext());
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(Match_scoring.this);
loadRecyclerViewData();
}
private void loadRecyclerViewData() {
StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_data, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
int success = jsonObject.getInt("success");
if (success == 1) {
JSONArray jsonArray = jsonObject.getJSONArray("Data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject_current = jsonArray.getJSONObject(i);
TeamItems teamItems = new TeamItems(
jsonObject_current.getString("player_id"),
jsonObject_current.getString("player_name"),
jsonObject_current.getString("player_dob"),
jsonObject_current.getString("position"),
jsonObject_current.getString("team_id")
);
list_items.add(teamItems);
} adapter.notifyDataSetChanged();
} else {
Toast.makeText(getApplicationContext(), "Please try again later.", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG);
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
private void filter(String text){
ArrayList<TeamItems> filteredList = new ArrayList<>();
for (TeamItems item : list_items){
if(item.getPlayer_name().toLowerCase().contains(text.toLowerCase())){
filteredList.add(item);
}
}
adapter.filterList(filteredList);
}
@Override
public void onItemClick(int position) {
TeamItems clickedItem = list_items.get(position);
Intent details = new Intent(Match_scoring.this,ScoringDetails.class);
p_id = clickedItem.getPlayer_id();
p_name = clickedItem.getPlayer_name();
startActivity(details);
}
}
Вот макет XML
файл для того же:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"tools:context=".Match_scoring">
<RelativeLayout
android:layout_width="match_parent"android:layout_height="wrap_content">
<EditText
android:id="@+id/mSearch_match"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginEnd="8dp"android:layout_marginStart="8dp"android:layout_marginTop="24dp"android:hint="Search Player"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/total_players_recyclerView"android:layout_width="match_parent"android:layout_height="200dp"android:layout_marginStart="8dp"android:layout_marginTop="10dp"android:layout_marginEnd="8dp"android:layout_marginVertical="8dp"android:layout_below="@id/mSearch_match"/>
<Button
android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/substitute"android:text="SUBS"android:layout_centerHorizontal="true"android:layout_below="@id/total_players_recyclerView"/>
<TextView
android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_below="@id/substitute"android:layout_centerHorizontal="true"android:id="@+id/url"/>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
А вот мой скрипт php:
<?php
$servername = "prasaurus.com";
$username = "prasauru_fand";
$password = "[DB-PASSWORD]";
$dbname = "prasauru_trial_db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$pair_id=$_POST['pair_id'];
$fixture=$_POST['fixture'];
$response = array();
$query = "select * from tbl_201_0_match_details";
$result = mysqli_query($conn, $query);
if(mysqli_num_rows($result) > 0){
$response['success'] = 1;
$Data = array();
while ($row = mysqli_fetch_assoc($result)) {
array_push($Data , $row);
}
$response['Data'] = $Data;
}
else {
$response['success'] = 0;
$response['message'] = 'No data';
}
echo json_encode($response);
mysqli_close($conn);
?>
Я сталкивался с этой проблемой очень много раз. как notifyDatasetChanged()
на адаптере не работает с отступом.
Просто создайте простую функцию в адаптереайзера и вызывайте функцию, когда данные доступны из webcall
public void updateDataset(List<Model> updatedData){
yourListWhichInflateData=updatedData;
notifyDatasetChanged();
}
Вызывайте вышеуказанную функцию, используя экземпляр адаптера, когда данные доступны в действии или обновлены.
Других решений пока нет …