Android ListView中未显示任何内容,它未加载内容
我的bookListing应用程序有一个问题,问题是我从 不出现在列表视图中我现在不知道这是什么原因,有人能在这方面帮助我吗?我面临着与装载机打交道的艰难时期:) BookActivity.javaAndroid 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
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;
}