Java 运行特定活动时出现LogCat错误
我的应用程序没有生成java文件中请求的信息。人们希望该应用程序能够生成一个信息回收器视图,该视图存储在phpMyAdmin数据库中 然而,我得到的只是一个空白/空的活动 < Log>正在产生一个与RealdReVIEW有关的错误,但是,我不知道如何绕过这个错误/知道这是否是导致空白活动的错误。 LogCatJava 运行特定活动时出现LogCat错误,java,android,android-studio,android-recyclerview,Java,Android,Android Studio,Android Recyclerview,我的应用程序没有生成java文件中请求的信息。人们希望该应用程序能够生成一个信息回收器视图,该视图存储在phpMyAdmin数据库中 然而,我得到的只是一个空白/空的活动 < Log>正在产生一个与RealdReVIEW有关的错误,但是,我不知道如何绕过这个错误/知道这是否是导致空白活动的错误。 LogCat 02-07 11:28:55.936 5622-5622/com.example.xxxx.myapplication E/RecyclerView: No adapter attache
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;
导入android.content.Context;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入java.util.List;
公共类ProductAdapter扩展了RecyclerView.Adapter{
私有上下文mCtx;
私有列表产品列表;
公共产品适配器(上下文mCtx,列表productList){
this.mCtx=mCtx;
this.productList=productList;
}
@凌驾
公共产品ViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutFlater充气机=LayoutFlater.from(mCtx);
视图=充气机。充气(R.layout.list\u布局,空);
返回新的ProductViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(ProductViewHolder,int位置){
产品=产品列表。获取(位置);
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());
}
@凌驾
public int getItemCount(){
返回productList.size();
}
类ProductViewHolder扩展了RecyclerView.ViewHolder{
图像视图图像视图;
TextView textViewType、textViewProperty、textViewMoreInfo、textViewDate;
公共产品视图持有者(视图项视图){
超级(项目视图);
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);
}
}
package com.example.benchalmers.myapplication;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.widget.Toast;
导入com.android.volley.Request;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
公共类维护扩展了AppCompative活动{
私有静态最终字符串产品\u URL=”http://192.168.64.2/MyApi/api.php";
回收视图回收视图;
私有产品适配器;
列出产品清单;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maintenance);
productList=新的ArrayList();
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
this.adapter=新产品适配器(this,productList);
recyclerView.setAdapter(适配器);
装载产品();
}
私有void loadProducts(){
StringRequest StringRequest=新的StringRequest(Request.Method.GET、PRODUCT\u URL、,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONArray产品=新的JSONArray(响应);
对于(int i=0;i,如错误消息所述,您没有将任何适配器
绑定到回收视图
,因此它无法显示任何内容并“跳过布局”
当您使用RecyclerView
创建一个应用程序,并且您已经编写了一个适配器
,那么您还必须将该适配器
附加到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 ();
}
私有产品适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maintenance);
productList=新的ArrayList();
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
this.adapter=新产品适配器(this,productList);
recyclerView.setAdapter(适配器)
装载产品();
}
有关RecyclerView的更多信息,请参阅Android开发者的页面
请注意,在loadProducts();
中,请求完成后,您不能重新实例化适配器,而是调用this.Adapter.notifyDataSetChanged();
你能像上面说的那样发布你的RecyclerView适配器和活动代码吗。你没有用RecyclerView
附加适配器。你能在这里添加活动吗?添加适配器代码。在添加适配器的地方添加活动代码。这个错误不是来自适配器内部,你可以看到你是如何在中附加适配器的ode>StringRequest<