簡體   English   中英

如何從 mysql 數據庫中獲取數據到回收站視圖中?

[英]how to get data from mysql database into recycler view?

我正在制作一個讓用戶創建會議的應用程序,我希望在回收站視圖中顯示會議的詳細信息(例如名稱、類型、位置)。我自己運行了 php 代碼,並且能夠從數據庫中獲取值。

目前,我收到一個錯誤

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

在 recyclerviewAdapter 中

 holder.Name.setText(users.getName());
 holder.Type.setText(users.getType());
 holder.Location.setText(users.getLocation());

這與

public class Users {
    private String name,type,location;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

回收器視圖適配器

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserHolder>{
    Context context;
    List<Users> usersList;

    public UserAdapter(Context context, List<Users> usersList) {
        this.context = context;
        this.usersList = usersList;
    }

    @NonNull
    @Override
    public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View userLayout= LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main2,parent,false);
        return new UserHolder(userLayout);
    }

    @Override
    public void onBindViewHolder(@NonNull UserHolder holder, int position) {
        Users users=usersList.get(position);
        holder.Name.setText(users.getName());
        holder.Type.setText(users.getType());
        holder.Location.setText(users.getLocation());
    }

    @Override
    public int getItemCount() {
        return usersList.size();
    }

    public class UserHolder extends RecyclerView.ViewHolder{
        TextView Name,Type,Location;

        public UserHolder(@NonNull View itemView){
            super(itemView);
            Name=itemView.findViewById(R.id.textTitle);
            Type=itemView.findViewById(R.id.textType);
            Location=itemView.findViewById(R.id.textLocation);
        }
    }

}

主要活動代碼

public class MainActivity2 extends AppCompatActivity {
    private static final String URL = "http://10.0.2.2/mad/activitydisplay.php";
    RecyclerView recyclerView;
    UserAdapter userAdapter;
    List<Users> usersList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        recyclerView = findViewById(R.id.recylcerList);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        usersList=new ArrayList<>();

        LoadAllUser();

    }

    private void LoadAllUser() {
        JsonArrayRequest request =new JsonArrayRequest(URL, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray array) {
                for (int i=0;i<array.length();i++){
                    try {
                        JSONObject object=array.getJSONObject(i);
                        String name=object.getString("eventname").trim();
                        String type=object.getString("type").trim();
                        String location=object.getString("location").trim();

                        Users user= new Users();
                        user.setName(name);
                        user.setType(type);
                        user.setLocation(location);
                        usersList.add(user);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
                userAdapter=new UserAdapter(MainActivity2.this,usersList);
                recyclerView.setAdapter(userAdapter);

            }
        },new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError error){
                Toast.makeText(MainActivity2.this, error.toString(), Toast.LENGTH_SHORT).show();
            }
        });
        RequestQueue requestQueue=Volley.newRequestQueue(MainActivity2.this);
        requestQueue.add((request));
    }
}

php 代碼從表中獲取數據

$sql="SELECT * FROM `activitytable` ";
$result=mysqli_query($conn,$sql);
$user=array();

while($row = mysqli_fetch_assoc($result)){
    $index['eventname']=$row['eventname'];
    $index['type']=$row['type'];
    $index['location']=$row['location'];
    array_push($user, $index);
}
echo json_encode($user);

activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recylcerList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

活動列表資源文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:orientation="horizontal" >

                <TextView
                    style="bold"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Title:"
                    android:textColor="@color/black"
                    android:textSize="24dp" />

                <TextView
                    android:id="@+id/textTitle"
                    style="bold"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/black"
                    android:textSize="24dp" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:orientation="horizontal" >

                <TextView
                    style="bold"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Type:"
                    android:textColor="@color/black"
                    android:textSize="24dp" />

                <TextView
                    android:id="@+id/textType"
                    style="bold"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/black"
                    android:textSize="24dp" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:orientation="horizontal" >

                <TextView
                    style="bold"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Location:"
                    android:textColor="@color/black"
                    android:textSize="24dp" />

                <TextView
                    android:id="@+id/textLocation"
                    style="bold"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/black"
                    android:textSize="24dp" />
            </LinearLayout>

        </LinearLayout>

    </androidx.cardview.widget.CardView>

</LinearLayout>

檢查您的 xml(R.layout.activity_main2) 看起來您的視圖 id 來自另一個布局

代替

public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View userLayout= LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main2,parent,false);
        return new UserHolder(userLayout);
    }

用這個

public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View userLayout= LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_list ,parent,false);
        return new UserHolder(userLayout);
    }

因為 activity_main2 不包含 R.id.textTitle,R.id.textType,R.id.textLocation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM