Android 当我需要使用php web服务从数据库返回新闻列表时,不幸的项目停止了
我需要返回一个带有php web服务的新闻列表。但是,当我运行项目并单击go to activity last news按钮时,它会显示此错误 有什么问题?我怎样才能解决这个问题 最新新闻活动:Android 当我需要使用php web服务从数据库返回新闻列表时,不幸的项目停止了,android,Android,我需要返回一个带有php web服务的新闻列表。但是,当我运行项目并单击go to activity last news按钮时,它会显示此错误 有什么问题?我怎样才能解决这个问题 最新新闻活动: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_last_news);
PostService postService=new PostService(this);
postService.getPosts(new IPostService() {
@Override
public void OnPostRecived(List<Post> posts) {
RecyclerView recyclerView=(RecyclerView)findViewById(R.id.lastnews_recycle);
NewsAdapter newsAdapter=new NewsAdapter(LastNewsActivity.this,posts);
recyclerView.setLayoutManager(new LinearLayoutManager(LastNewsActivity.this
,LinearLayoutManager.VERTICAL,false));
recyclerView.setAdapter(newsAdapter);
}
});
}
public class PostService {
private Context context;
public PostService(Context context){
this.context = context;
}
public void getPosts(final IPostService postService){
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.GET, "http://192.168.1.2:8080/Test/GetPosts.php", null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
List<Post> posts=new ArrayList<>();
for (int i=0 ; i<response.length();i++){
Post post=new Post();
try {
JSONObject jsonObject=response.getJSONObject(i);
post.setTitle(jsonObject.getString("title"));
post.setId(jsonObject.getInt("id"));
post.setDate(jsonObject.getString("date"));
post.setContent(jsonObject.getString("content"));
post.setImage(jsonObject.getString("image_url"));
posts.add(post);
} catch (JSONException e) {
e.printStackTrace();
}
}
postService.OnPostRecived(posts);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(18000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Volley.newRequestQueue(context).add(jsonArrayRequest);
}
public class Post {
private int id;
private String PostImageUrl;
private String Title;
private String Content;
private String Date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public String getDate() {
return Date;
}
public void setDate(String date) {
Date = date;
}
public String getImage() {
return PostImageUrl;
}
public void setImage(String image) {
PostImageUrl = image;
}
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
private List<Post> posts;
private Context context;
public NewsAdapter( Context context,List<Post> posts ){
this.posts = posts;
this.context = context;
}
@Override
public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new NewsViewHolder(LayoutInflater.from(context).inflate(R.layout.layout_news,parent,false));
}
@Override
public void onBindViewHolder(NewsViewHolder holder, int position) {
Post post=posts.get(position);
holder.Title.setText(post.getTitle());
holder.Content.setText(post.getContent());
holder.Date.setText(post.getDate());
Picasso.with(context).load(post.getImage()).into(holder.Image);
}
@Override
public int getItemCount() {
return posts.size();
}
public class NewsViewHolder extends RecyclerView.ViewHolder {
private ImageView Image;
private TextView Title;
private TextView Content;
private TextView Date;
public NewsViewHolder(View itemview) {
super(itemview);
Image = (ImageView) itemview.findViewById(R.id.item_news_image);
Title = (TextView) itemview.findViewById(R.id.item_news_title);
Content = (TextView) itemview.findViewById(R.id.item_news_content);
Date = (TextView) itemview.findViewById(R.id.item_news_date);
}
}
}
新闻适配器:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_last_news);
PostService postService=new PostService(this);
postService.getPosts(new IPostService() {
@Override
public void OnPostRecived(List<Post> posts) {
RecyclerView recyclerView=(RecyclerView)findViewById(R.id.lastnews_recycle);
NewsAdapter newsAdapter=new NewsAdapter(LastNewsActivity.this,posts);
recyclerView.setLayoutManager(new LinearLayoutManager(LastNewsActivity.this
,LinearLayoutManager.VERTICAL,false));
recyclerView.setAdapter(newsAdapter);
}
});
}
public class PostService {
private Context context;
public PostService(Context context){
this.context = context;
}
public void getPosts(final IPostService postService){
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.GET, "http://192.168.1.2:8080/Test/GetPosts.php", null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
List<Post> posts=new ArrayList<>();
for (int i=0 ; i<response.length();i++){
Post post=new Post();
try {
JSONObject jsonObject=response.getJSONObject(i);
post.setTitle(jsonObject.getString("title"));
post.setId(jsonObject.getInt("id"));
post.setDate(jsonObject.getString("date"));
post.setContent(jsonObject.getString("content"));
post.setImage(jsonObject.getString("image_url"));
posts.add(post);
} catch (JSONException e) {
e.printStackTrace();
}
}
postService.OnPostRecived(posts);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(18000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Volley.newRequestQueue(context).add(jsonArrayRequest);
}
public class Post {
private int id;
private String PostImageUrl;
private String Title;
private String Content;
private String Date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public String getDate() {
return Date;
}
public void setDate(String date) {
Date = date;
}
public String getImage() {
return PostImageUrl;
}
public void setImage(String image) {
PostImageUrl = image;
}
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
private List<Post> posts;
private Context context;
public NewsAdapter( Context context,List<Post> posts ){
this.posts = posts;
this.context = context;
}
@Override
public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new NewsViewHolder(LayoutInflater.from(context).inflate(R.layout.layout_news,parent,false));
}
@Override
public void onBindViewHolder(NewsViewHolder holder, int position) {
Post post=posts.get(position);
holder.Title.setText(post.getTitle());
holder.Content.setText(post.getContent());
holder.Date.setText(post.getDate());
Picasso.with(context).load(post.getImage()).into(holder.Image);
}
@Override
public int getItemCount() {
return posts.size();
}
public class NewsViewHolder extends RecyclerView.ViewHolder {
private ImageView Image;
private TextView Title;
private TextView Content;
private TextView Date;
public NewsViewHolder(View itemview) {
super(itemview);
Image = (ImageView) itemview.findViewById(R.id.item_news_image);
Title = (TextView) itemview.findViewById(R.id.item_news_title);
Content = (TextView) itemview.findViewById(R.id.item_news_content);
Date = (TextView) itemview.findViewById(R.id.item_news_date);
}
}
公共类NewsAdapter扩展了RecyclerView.Adapter{
私人名单员额;
私人语境;
公共新闻适配器(上下文、列表帖子){
这个.posts=posts;
this.context=上下文;
}
@凌驾
public NewsViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的新闻视图持有者(LayoutInflater.from(context).膨胀(R.layout.layout_news,parent,false));
}
@凌驾
BindViewHolder上的公共无效(NewsViewHolder,int位置){
Post Post=posts.get(位置);
holder.Title.setText(post.getTitle());
holder.Content.setText(post.getContent());
holder.Date.setText(post.getDate());
毕加索.with(context).load(post.getImage()).into(holder.Image);
}
@凌驾
public int getItemCount(){
返回后。大小();
}
公共类NewsViewHolder扩展了RecyclerView.ViewHolder{
私有图像查看图像;
私有文本视图标题;
私有文本视图内容;
私有文本查看日期;
公共新闻视图持有者(查看项目视图){
超级(项目视图);
Image=(ImageView)itemview.findViewById(R.id.item\u news\u Image);
Title=(TextView)itemview.findViewById(R.id.item\u news\u Title);
Content=(TextView)itemview.findViewById(R.id.item\u news\u Content);
Date=(TextView)itemview.findViewById(R.id.item\u news\u Date);
}
}
}
更新
在Logcat中向我展示:
05-04 05:01:16.031 2199-2199/com.learningandroid.a7learn.example.mr_enginer.newsproject E/RecyclerView:未连接适配器;跳过布局
05-04 05:01:16.184 2199-2199/com.learningandroid.a7learn.example.mr_enginer.newsproject E/RecyclerView:未连接适配器;跳过布局
05-04 05:01:16.320 2199-2233/com.learningandroid.a7learn.example.mr_enginer.newsproject D/OpenGLRenderer:endAllStagingAnimators位于0xf3dc1800(RippledRavable)上,带句柄0xeec397b0
这是由于一些意外/未修补的错误造成的。请检查您的logcat是否有错误debugging@FernandoTan我更新问题