运行特定活动

时间:2018-02-07 16:36:26

标签: java android android-studio android-recyclerview

我的应用程序没有生成java文件中请求的信息。希望应用程序能够生成存储在phpMyAdmin数据库中的信息的回收者视图。

但是,我得到的只是空白/空活动。

LogCat产生的错误与RecyclerView有关,但是,我不知道如何解决此错误/知道这是否是导致空白活动的错误。

logcat的

02-07 11:28:55.936 5622-5622/com.example.xxxx.myapplication E/RecyclerView: No adapter attached; skipping layout

适配器

package com.example.benchalmers.myapplication;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder> {


    private Context mCtx;
    private List<Product> productList;

    public ProductAdapter(Context mCtx, List<Product> productList) {
        this.mCtx = mCtx;
        this.productList = productList;
    }

    @Override
    public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.list_layout, null);
        return new ProductViewHolder(view);

    }

    @Override
    public void onBindViewHolder(ProductViewHolder holder, int position) {

        Product product = productList.get(position);

        holder.textViewType.setText(product.getType());
        holder.textViewProperty.setText(product.getProperty());
        holder.textViewMoreInfo.setText(String.valueOf(product.getMoreInfo()));
        holder.textViewDate.setText(String.valueOf(product.getDate()));

        //holder.imageView.setImageDrawable(mCtx.getResources().getDrawable(product.getImage()));
    }

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

    class ProductViewHolder extends RecyclerView.ViewHolder {

        ImageView imageView;
        TextView textViewType, textViewProperty, textViewMoreInfo, textViewDate;

        public ProductViewHolder(View itemView) {
            super(itemView);

            imageView = itemView.findViewById(R.id.imageView);
            textViewType = itemView.findViewById(R.id.textViewType);
            textViewProperty = itemView.findViewById(R.id.textViewProperty);
            textViewMoreInfo = itemView.findViewById(R.id.textViewMoreInfo);
            textViewDate = itemView.findViewById(R.id.textViewDate);

        }
    }
}

活动

package com.example.benchalmers.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class Maintenance extends AppCompatActivity {

    private static final String PRODUCT_URL = "http://192.168.64.2/MyApi/api.php";

    RecyclerView recyclerView;
    private ProductAdapter adapter;

    List<Product> productList;

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

        productList = new ArrayList<>();

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        this.adapter = new ProductAdapter(this, productList);
        recyclerView.setAdapter(adapter);

        loadProducts ();

    }

    private void loadProducts () {

        StringRequest stringRequest = new StringRequest(Request.Method.GET, PRODUCT_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONArray products  =new JSONArray(response);

                            for (int i = 0; i<products.length(); i++){

                                JSONObject productObject = products.getJSONObject(i);

                                int maintenance_id = productObject.getInt("maintenance_id");
                                String type = productObject.getString("type");
                                String property = productObject.getString("property");
                                String more_info = productObject.getString("more_info");
                                Double date = productObject.getDouble("date");

                                Product product = new Product(maintenance_id, type, property, more_info, date);
                                productList.add(product);

                            }

                            adapter = new ProductAdapter(Maintenance.this, productList);
                            recyclerView.setAdapter(adapter);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                },

                new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                Toast.makeText(Maintenance.this, error.getMessage(), Toast.LENGTH_SHORT).show();

                    }
                });

        Volley.newRequestQueue(this).add(stringRequest);

    }
}

我没有在这个阶段附加任何Java文件,因为我不相信它们是这里的问题。

我已经查看了Stack上的各种线程,但似乎都没有做到这一点。

任何指导都将不胜感激!

1 个答案:

答案 0 :(得分:0)

正如错误消息所示,您没有将任何Adapter绑定到RecyclerView,因此无法显示任何内容,并且&#34;跳过布局&#34;

当您使用RecyclerView创建应用时,如果您编写了Adapter,那么您还必须将Adapter附加到RecyclerView,在你的代码中像这样:

private ProductAdapter adapter;

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

    productList = new ArrayList<>();

    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    this.adapter = new ProductAdapter(this, productList);
    recyclerView.setAdapter(adapter)

    loadProducts ();

}

有关RecyclerView的更多信息,请参阅Android开发者的this页面。

请注意,在loadProducts();中,请求完成后,您必须重新验证您的适配器,而是调用this.adapter.notifyDataSetChanged();