Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ArrayAdapter将获取的json数据显示到listView中_Java_Android_Listview - Fatal编程技术网

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(位置);数据的初始化。