Android ListView中未显示任何内容,它未加载内容

Android ListView中未显示任何内容,它未加载内容,android,listview,Android,Listview,我的bookListing应用程序有一个问题,问题是我从 不出现在列表视图中我现在不知道这是什么原因,有人能在这方面帮助我吗?我面临着与装载机打交道的艰难时期:) BookActivity.java package com.example.android.booklistingapp; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.su

我的bookListing应用程序有一个问题,问题是我从 不出现在列表视图中我现在不知道这是什么原因,有人能在这方面帮助我吗?我面临着与装载机打交道的艰难时期:) BookActivity.java

 package com.example.android.booklistingapp;

import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
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.Toast;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

public class BookActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<VolumeInfo>> {

    EditText searchFeild;
    ListView booksListView;
    BookApdapter apdapter;
    String url ;

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

        booksListView = (ListView) findViewById(R.id.MyList);
        searchFeild = (EditText) findViewById(R.id.Search_EditText);

        apdapter = new BookApdapter(this, new ArrayList<VolumeInfo>());
        booksListView.setAdapter(apdapter);
       /* InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(searchFeild.getWindowToken(), 0);*/

        Button searchButton = (Button) findViewById(R.id.Search_Button);
        searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userInputSearchFeild = searchFeild.getText().toString().toLowerCase();
                Toast.makeText(getApplicationContext(), "yesssss", Toast.LENGTH_LONG).show();
                try {
                    userInputSearchFeild = URLEncoder.encode(userInputSearchFeild, "UTF-8");
                    url = "https://www.googleapis.com/books/v1/volumes?q=" + userInputSearchFeild + "&maxResults=3";

                } catch (UnsupportedEncodingException e) {
                    Log.i("","Encode ERRor");
                    e.printStackTrace();
                }
            }
        });
        LoaderManager loaderManager=getSupportLoaderManager();
        loaderManager.initLoader(0,null,BookActivity.this).forceLoad();
    }

    @Override
    public Loader<List<VolumeInfo>> onCreateLoader(int id, Bundle args) {
        return new VolumeInfoLoader(this,url);
    }

    @Override
    public void onLoadFinished(Loader<List<VolumeInfo>> loader, List<VolumeInfo> data) {
        apdapter.clear();
        if(data != null && !data.isEmpty())
            apdapter.addAll(data);
    }

    @Override
    public void onLoaderReset(Loader<List<VolumeInfo>> loader) {
        apdapter.clear();
    }
}
package com.example.android.booklistingapp;
导入android.support.v4.app.LoaderManager;
导入android.support.v4.content.Loader;
导入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.Toast;
导入java.io.UnsupportedEncodingException;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入java.util.List;
公共类BookActivity扩展AppCompatActivity实现LoaderManager.LoaderCallbacks{
编辑文本搜索字段;
ListView;ListView;
书本适配器;
字符串url;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);
booksListView=(ListView)findViewById(R.id.MyList);
searchFeild=(EditText)findViewById(R.id.Search\u EditText);
apdapter=newbookapdapter(这是newarraylist());
booksListView.setAdapter(apdapter);
/*InputMethodManager InputMethodManager=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
inputMethodManager.hideSoftInputFromWindow(searchFeild.getWindowToken(),0)*/
按钮搜索按钮=(按钮)findViewById(R.id.Search_按钮);
searchButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串userInputSearchFeild=searchFeild.getText().toString().toLowerCase();
Toast.makeText(getApplicationContext(),“yessss”,Toast.LENGTH\u LONG.show();
试一试{
userInputSearchFeild=URLEncoder.encode(userInputSearchFeild,“UTF-8”);
url=”https://www.googleapis.com/books/v1/volumes?q=“+userInputSearchFeild+”&maxResults=3”;
}捕获(不支持的编码异常e){
Log.i(“,”编码错误“);
e、 printStackTrace();
}
}
});
LoaderManager LoaderManager=getSupportLoaderManager();
loaderManager.initLoader(0,null,BookActivity.this).forceLoad();
}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
返回新的VolumeInfo加载程序(此url);
}
@凌驾
public void onLoadFinished(加载程序,列表数据){
apdapter.clear();
if(data!=null&&!data.isEmpty())
apdapter.addAll(数据);
}
@凌驾
公共void onLoaderReset(加载器){
apdapter.clear();
}
}
volumeinfoloader.java

package com.example.android.booklistingapp;


import  android.support.v4.content.AsyncTaskLoader;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Hazem_Khaled on 2017-10-12.
 */

public class VolumeInfoLoader extends AsyncTaskLoader<List<VolumeInfo>> {

    String mUrl;

    public VolumeInfoLoader(Context context, String url) {
        super(context);
        mUrl = url;
    }

    @Override
    protected void onStartLoading() {
        forceLoad();
    }

    @Override
    public List<VolumeInfo> loadInBackground() {
        if (mUrl == null) {
            Log.i("This ", "null ERROR");
            return null;
        }
        try {
            Toast.makeText(getContext(),"Start",Toast.LENGTH_LONG).show();
            URL url = new URL(mUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(10000);
            connection.setConnectTimeout(15000);
            connection.setRequestMethod("GET");
            connection.connect();

            InputStream IS = connection.getInputStream();
            InputStreamReader ISR = new InputStreamReader(IS);

            int data = ISR.read();
            String urlContent = "";
            Log.i("This is", urlContent);
            while (data != -1) {

                char c = (char) data;
                urlContent += c;
                data = ISR.read();
            }

           Toast.makeText(getContext(),urlContent,Toast.LENGTH_LONG).show();
            JSONObject root = new JSONObject(urlContent);
            JSONArray items = root.getJSONArray("item");
            List<VolumeInfo> booksInfo = new ArrayList<>();
            for (int i = 0; i < items.length(); i++) {
                JSONObject volInfo = items.getJSONObject(i);
                String bookTitle = volInfo.getString("title");
                String publisher = volInfo.getString("publisher");
                JSONArray authors = volInfo.getJSONArray("authors");

                StringBuilder authorsList = new StringBuilder();
                for (int j = 0; j < authors.length(); j++) {
                    authorsList.append("-" + authors.getString(i) + "\n");
                }
                VolumeInfo volumeInfo = new VolumeInfo(bookTitle, publisher, authorsList);
                booksInfo.add(volumeInfo);
            }
            return booksInfo;

        } catch (MalformedURLException e) {
            Log.i("This ", "URL ERROR");
            e.printStackTrace();
        } catch (JSONException e) {
            Log.i("This ", "json ERROR");
            e.printStackTrace();
        } catch (IOException e) {
            Log.i("This ", "io ERROR");
            e.printStackTrace();
        }

        return null;
    }
}
package com.example.android.booklistingapp;
导入android.support.v4.content.AsyncTaskLoader;
导入android.content.Context;
导入android.util.Log;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
/**
*由Hazem_Khaled于2017年10月12日创建。
*/
公共类VolumeInfoLoader扩展了AsyncTaskLoader{
弦乐;
公共卷信息加载器(上下文、字符串url){
超级(上下文);
mUrl=url;
}
@凌驾
开始加载时受保护的void(){
力载荷();
}
@凌驾
公共列表加载背景(){
if(mUrl==null){
Log.i(“此”、“空错误”);
返回null;
}
试一试{
Toast.makeText(getContext(),“Start”,Toast.LENGTH_LONG.show();
URL=新URL(mUrl);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setReadTimeout(10000);
连接。设置连接超时(15000);
connection.setRequestMethod(“GET”);
connection.connect();
InputStream IS=connection.getInputStream();
InputStreamReader ISR=新的InputStreamReader(IS);
int data=ISR.read();
字符串urlContent=“”;
Log.i(“这是”,urlContent);
while(数据!=-1){
char c=(char)数据;
urlContent+=c;
data=ISR.read();
}
Toast.makeText(getContext(),urlContent,Toast.LENGTH_LONG).show();
JSONObject根=新的JSONObject(urlContent);
JSONArray items=root.getJSONArray(“item”);
List booksInfo=new ArrayList();
对于(int i=0;ipackage com.example.android.booklistingapp;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by Hazem_Khaled on 2017-10-06.
 */

public class BookApdapter extends ArrayAdapter<VolumeInfo>{
    public BookApdapter(Activity context, ArrayList<VolumeInfo> booksInfo){
        super(context,0,booksInfo);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        View listView = convertView;
        if (listView == null)
            listView = LayoutInflater.from(getContext()).inflate(R.layout.author_list_item, parent, false);


        VolumeInfo volumeInfo=getItem(position);
        TextView bookTitle = (TextView) listView.findViewById(R.id.bookTitle_TextView);
        TextView bookAuthors = (TextView) listView.findViewById(R.id.bookAuthors_TexttView);
        TextView bookPublisher = (TextView) listView.findViewById(R.id.bookPublisher_TextView);

        if(volumeInfo!=null) {

            bookTitle.setText("Book Title:\n" + volumeInfo.getTitle() + "\n");

            StringBuilder authors = volumeInfo.getAuthorsList();
            bookAuthors.setText("Author(s):\n" + authors.toString() + "\n");
            bookPublisher.setText("Publisher:\n" + volumeInfo.getPublisher() + "\n");
        }
        else{
            bookTitle.setText("there is no books for this category you have entered,please try valid category");
            bookAuthors.setText("");
            bookPublisher.setText("");
        }

        return listView;
    }
}
EditText searchFeild;
ListView booksListView;
BookApdapter apdapter;
String url ;

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

    booksListView = (ListView) findViewById(R.id.MyList);
    searchFeild = (EditText) findViewById(R.id.Search_EditText);

    apdapter = new BookApdapter(this, new ArrayList<VolumeInfo>());
    booksListView.setAdapter(apdapter);
   /* InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(searchFeild.getWindowToken(), 0);*/

    Button searchButton = (Button) findViewById(R.id.Search_Button);
    searchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String userInputSearchFeild = searchFeild.getText().toString().toLowerCase();
            Toast.makeText(getApplicationContext(), "yesssss", Toast.LENGTH_LONG).show();
            try {
                userInputSearchFeild = URLEncoder.encode(userInputSearchFeild, "UTF-8");
                url = "https://www.googleapis.com/books/v1/volumes?q=" + userInputSearchFeild + "&maxResults=3";
                LoaderManager loaderManager=getSupportLoaderManager();
                loaderManager.initLoader(0,null,BookActivity.this).forceLoad();
            } catch (UnsupportedEncodingException e) {
                Log.i("","Encode ERRor");
                e.printStackTrace();
            }
        }
    });

}

@Override
public Loader<List<VolumeInfo>> onCreateLoader(int id, Bundle args) {
    Log.i("Loader"," onCreateLoader");

    return new VolumeInfoLoader(this,url);

}

@Override
public void onLoadFinished(Loader<List<VolumeInfo>> loader, List<VolumeInfo> data) {
    Log.i("Loader"," onLoadFinished");

    apdapter.clear();
    if(data != null && !data.isEmpty())
        apdapter.addAll(data);
    apdapter.notifyDataSetChanged();
}

@Override
public void onLoaderReset(Loader<List<VolumeInfo>> loader) {
    apdapter.clear();
    Log.i("Loader"," onLoaderReset");

}
String mUrl;

public VolumeInfoLoader(Context context, String url) {
    super(context);
    mUrl = url;
}

@Override
protected void onStartLoading() {
    forceLoad();
}

@Override
public List<VolumeInfo> loadInBackground() {
    if (mUrl == null) {
        Log.i("This ", "null ERROR");
        return null;
    }
    try {
        URL url = new URL(mUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setReadTimeout(10000);
        connection.setConnectTimeout(15000);
        connection.setRequestMethod("GET");
        connection.connect();

        InputStream IS = connection.getInputStream();
        InputStreamReader ISR = new InputStreamReader(IS);

        int data = ISR.read();
        String urlContent = "";
        Log.i("This is", urlContent);
        while (data != -1) {

            char c = (char) data;
            urlContent += c;
            data = ISR.read();
        }
        JSONObject root = new JSONObject(urlContent);
        JSONArray items = root.getJSONArray("items");
        List<VolumeInfo> booksInfo = new ArrayList<>();
        for (int i = 0; i < items.length(); i++) {
            JSONObject volInfo = items.getJSONObject(i);
            volInfo=volInfo.getJSONObject("volumeInfo");
            String bookTitle = volInfo.getString("title");
            String publisher="Not Mention";
            if(volInfo.has("publisher")){
               publisher=volInfo.getString("publisher");
            }

            JSONArray authors = volInfo.getJSONArray("authors");

            StringBuilder authorsList = new StringBuilder();
            for (int j = 0; j < authors.length(); j++) {
                authorsList.append("-" + authors.getString(j) + "\n");
            }
            VolumeInfo volumeInfo = new VolumeInfo(bookTitle, publisher, authorsList);
            booksInfo.add(volumeInfo);
        }
        return booksInfo;

    } catch (MalformedURLException e) {
        Log.i("This ", "URL ERROR");
        e.printStackTrace();
    } catch (JSONException e) {
        Log.i("This ", "json ERROR");
        e.printStackTrace();
    } catch (IOException e) {
        Log.i("This ", "io ERROR");
        e.printStackTrace();
    }

    return null;
}