Java 如何使用ArrayAdapter将获取的json数据显示到listView中
我想让我的应用程序使用Java 如何使用ArrayAdapter将获取的json数据显示到listView中,java,android,listview,Java,Android,Listview,我想让我的应用程序使用volley显示从GoogleBooks获取的书籍的标题。我不明白我做错了什么。当我运行应用程序并搜索书籍时,它不会更新列表视图上的任何内容。在logcat中,它完美地显示了书籍的标题。请帮助我在列表视图中显示获取的数据 这是我的主xml文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and
volley
显示从GoogleBooks
获取的书籍的标题。我不明白我做错了什么。当我运行应用程序并搜索书籍时,它不会更新列表视图上的任何内容。在logcat
中,它完美地显示了书籍的标题。请帮助我在列表视图中显示获取的数据
这是我的主xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:orientation="vertical"
tools:context=".MainActivity"
android:padding="10dp">
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter the Author's name. "
android:padding="10dp" />
<Button
android:id="@+id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/edit_text"
android:text="Search"
android:layout_alignRight="@+id/edit_text" />
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="@string/noDataFound"
android:layout_below="@+id/edit_text"
tools:visibility="visible"
android:paddingLeft="16dp"
android:paddingRight="16dp" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
**this is my list_ite xml file**
<?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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView
android:id="@+id/result1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="title here"/>
<TextView
android:id="@+id/result2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="authors here" />
</LinearLayout>
**This is my MainActivity.java file**
package com.example.manuj.booklistingthisone;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
//Declaration of variables
EditText author;
Button search;
TextView result1;
// TextView result2;
ListView listView;
BooksAdapter booksAdapter;
//Declaration of URL
String baseUrl=" https://www.googleapis.com/books/v1/volumes?q=search+";
String API="&appid=AIzaSyDSP4GIpZsirfBnT1eRtkZypn2Qvca4RAw";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
author=(EditText)findViewById(R.id.edit_text);
search=(Button)findViewById(R.id.search);
result1=(TextView)findViewById(R.id.result1);
// result2=(TextView) findViewById(R.id.result2);
booksAdapter=new BooksAdapter(this,-1);
listView=(ListView)findViewById(R.id.listView);
listView.setAdapter(booksAdapter);
final ArrayList<Book> books=new ArrayList<>();
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String myUrl=baseUrl+author.getText().toString()+API;
Log.i("URL","UR URL IS"+myUrl);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.GET, myUrl,null, new Response.Listener<JSONObject>() {
public void onResponse(JSONObject response) {
Log.i("response","response"+response);
try {
String info=response.getString("items");
JSONArray jsonArray=new JSONArray(info);
for(int i=0;i<jsonArray.length();i++){
JSONObject parObj=jsonArray.getJSONObject(i);
String vol=parObj.getString("volumeInfo");
JSONObject ti=new JSONObject(vol);
String titles=ti.getString("title");
Log.i("FINAL","FINAL IS "+titles);
Book book=new Book(titles);
books.add(book);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
}
});
MySingleton.getInstance(MainActivity.this).addToRequestQue(jsonObjectRequest);
}
});
}
}
**This is my Book.java file**
package com.example.manuj.booklistingthisone;
public class Book {
//title for the book
private String mTitle;
//author of the book
// private String mAuthor;
public Book(String title){
mTitle=title;
// this.mAuthor=author;
}
// public String getAuthor() {return mAuthor;}
public String getTitle() {
return mTitle;
}
}
**This is my ArrayAdapter.java file**
package com.example.manuj.booklistingthisone;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class BooksAdapter extends ArrayAdapter<Book> {
public BooksAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
Book book = getItem(position);
if (view == null){
view = LayoutInflater.from(getContext()).inflate(
R.layout.list_item, parent, false);
}
TextView title = (TextView) view.findViewById(R.id.result1);
// TextView author = (TextView) view.findViewById(R.id.result2);
title.setText(book.getTitle());
// author.setText(book.getAuthor());
return view;
}
}
**This is my Singleton.java file**
package com.example.manuj.booklistingthisone;
import android.content.Context;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
/**
* Created by studio on 14/06/17.
*/
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue requestQueue;
private static Context mCtx;
private MySingleton(Context context){
mCtx = context;
requestQueue = getRequestQueue();
}
public RequestQueue getRequestQueue(){
if(requestQueue==null){
requestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return requestQueue;
}
public static synchronized MySingleton getInstance(Context context){
if(mInstance==null){
mInstance = new MySingleton(context);
}
return mInstance;
}
public void addToRequestQue(Request request){
requestQueue.add(request);
}
}
**这是我的列表xml文件**
**这是我的MainActivity.java文件**
package com.example.manuj.booklistingthisone;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入com.android.volley.Request;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonObjectRequest;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
//变量声明
编辑文本作者;
按钮搜索;
文本视图结果1;
//文本视图结果2;
列表视图列表视图;
书籍适配器书籍适配器;
//URL声明
字符串baseUrl=”https://www.googleapis.com/books/v1/volumes?q=search+";
字符串API=“&appid=AIzaSyDSP4GIpZsirfBnT1eRtkZypn2Qvca4RAw”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
作者=(编辑文本)findviewbyd(R.id.edit\u文本);
search=(按钮)findviewbyd(R.id.search);
result1=(TextView)findViewById(R.id.result1);
//result2=(TextView)findViewById(R.id.result2);
booksAdapter=新booksAdapter(此为-1);
listView=(listView)findViewById(R.id.listView);
setAdapter(booksAdapter);
最终ArrayList图书=新ArrayList();
search.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串myUrl=baseUrl+author.getText().toString()+API;
Log.i(“URL”,“UR URL为”+myUrl);
JsonObjectRequest JsonObjectRequest=新JsonObjectRequest
(Request.Method.GET,myUrl,null,new Response.Listener()){
公共void onResponse(JSONObject响应){
Log.i(“响应”、“响应”+响应);
试一试{
String info=response.getString(“项目”);
JSONArray JSONArray=新JSONArray(信息);
对于(int i=0;i请尝试此更改.)
public class BooksAdapter extends ArrayAdapter<Book> {
Context context;
List<Book> data = null;
public BooksAdapter(Context context, int resource,List<Book> data) {
super(context, resource);
this.context = context;
this.data = data;
}
公共类BookAdapter扩展了ArrayAdapter{
语境;
列表数据=null;
公共适配器(上下文、int资源、列表数据){
超级(上下文、资源);
this.context=上下文;
这个数据=数据;
}
同样,在将数据存储到列表中之后,定义适配器并将该列表和绑定适配器传递到listview中。1.创建图书列表,然后将列表传递给BaseAdapter
final ArrayList<Book> books=new ArrayList<>();
booksAdapter=new BooksAdapter(this,-1, books);
listView=(ListView)findViewById(R.id.listView);
listView.setAdapter(booksAdapter);
final ArrayList books=new ArrayList();
booksAdapter=新的booksAdapter(这个-1,books);
listView=(listView)findViewById(R.id.listView);
setAdapter(booksAdapter);
2.更改应接受书籍列表的基本适配器构造函数
public BooksAdapter(Context context, int resource, ArrayList<Book> books) {
super(context, resource, books);
}
publicbooksadapter(上下文上下文、int资源、ArrayList书籍){
超级(上下文、资源、书籍);
}
3.一旦收到来自服务器的数据,调用booksAdapter.notifyDataSetChanged()
希望这能解决您的问题。您好。我不知道您的BookAdapter从何处获得书籍……正如AndroidTeam在下面指出的,您需要更改公共构造函数以适应您的列表
,并添加类变量“data”但是,一般来说,你应该考虑使用<代码> CurryReVIEW < /COD>而不是<代码> ListVIEW 。GTETEM(位置);数据的初始化。