Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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
将图像从数据库提取到Android GridView_Android_Database_Gridview - Fatal编程技术网

将图像从数据库提取到Android GridView

将图像从数据库提取到Android GridView,android,database,gridview,Android,Database,Gridview,我试图从数据库中获取文本和图像链接,并将其添加到ArrayList中,然后使用它在网格视图中显示文本和图像。但它没有出现。当我尝试添加列表项时,列表项似乎为空 我错过了什么?我已经找到了一些答案,但没能找到答案 public final class GridAdapter extends BaseAdapter { public static final String showUrl = "http://netbigs.com/apps/fetch.php"; String myJSON; p

我试图从数据库中获取文本和图像链接,并将其添加到ArrayList中,然后使用它在网格视图中显示文本和图像。但它没有出现。当我尝试添加列表项时,列表项似乎为空

我错过了什么?我已经找到了一些答案,但没能找到答案

public final class GridAdapter extends BaseAdapter {

public static final String showUrl = "http://netbigs.com/apps/fetch.php";
String myJSON;
public String mvname;
String mvinfo;
public String rdate,imglink;

private Context mContext;
private final List<Item> mItems = new ArrayList<Item>();
private final LayoutInflater mInflater;



private static final String TAG_RESULTS = "result";
private static final String TAG_ID = "mvid";
private static final String TAG_NAME = "mvname";
private static final String TAG_IMG = "imglink";
private static final String TAG_DATE = "rdate";
private static final String TAG_MOVINF = "mvinfo";

JSONArray movies = null;


public GridAdapter(Context context) {

    mItems.add(new Item(mvname,imglink));
    mContext=context;
    mInflater = LayoutInflater.from(context);

}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public Item getItem(int i) {
    return mItems.get(i);
}

@Override
public long getItemId(int i) {
    return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View v = view;
    ImageView picture;
    TextView name;
    getData();




    if (v == null) {
        v = mInflater.inflate(R.layout.grid_item, viewGroup, false);
        v.setTag(R.id.picture, v.findViewById(R.id.picture));
        v.setTag(R.id.text, v.findViewById(R.id.text));
    }

    picture = (ImageView) v.getTag(R.id.picture);
    name = (TextView) v.getTag(R.id.text);

    Item item = getItem(i);


    Picasso.with(this.mContext).load(item.drawableId).into(picture);

    name.setText(item.name);
    System.out.println(item.name);

    return v;
}

private static class Item {
    public final String name;
    public final String drawableId;

    Item(String name, String drawableId) {
        this.name = name;
        this.drawableId = drawableId;
    }
}

protected void showList(){


    try{
        JSONObject jsonObj = new JSONObject(myJSON);
        movies = jsonObj.getJSONArray(TAG_RESULTS);

        for (int i=0;i<movies.length();i++){
            JSONObject c = movies.getJSONObject(i);
            String mvid = c.getString(TAG_ID);
            mvname = c.getString(TAG_NAME);
            System.out.println(mvname);

            imglink = c.getString(TAG_IMG);
            System.out.println(imglink);

            rdate = c.getString(TAG_DATE);
            mvinfo = c.getString(TAG_MOVINF);
            try {



            }
            catch (Exception e){
                e.printStackTrace();
            }
        }




    }
    catch (JSONException e){
        e.printStackTrace();
    }



}

public void getData(){
    class GetDataJSON extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            try {
                String uri = showUrl;
                URL url = new URL(uri);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                InputStream inputStream = null;
                String result = null;
                inputStream = con.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                return sb.toString();
            } catch (Exception e) {
                return null;

            }
        }

        @Override
        protected void onPostExecute(String result){
            myJSON=result;
            showList();
        }
    }
    GetDataJSON g = new GetDataJSON();
    g.execute();
}
}
公共最终类GridAdapter扩展BaseAdapter{
公共静态最终字符串showUrl=”http://netbigs.com/apps/fetch.php";
字符串myJSON;
公共字符串名称;
字符串mvinfo;
公共字符串rdate,imglink;
私有上下文;
private final List mItems=new ArrayList();
私人最终布局平面图;
私有静态最终字符串标记_RESULTS=“result”;
私有静态最终字符串标记\u ID=“mvid”;
私有静态最终字符串标记_NAME=“mvname”;
私有静态最终字符串标记\u IMG=“imglink”;
私有静态最终字符串标记_DATE=“rdate”;
私有静态最终字符串标记_MOVINF=“mvinfo”;
JSONArray电影=null;
公共GridAdapter(上下文){
添加(新项目(mvname,imglink));
mContext=上下文;
mInflater=LayoutInflater.from(上下文);
}
@凌驾
public int getCount(){
返回mItems.size();
}
@凌驾
公共项getItem(int i){
返回mItems.get(i);
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
视图v=视图;
图像视图图片;
文本视图名称;
getData();
如果(v==null){
v=最小平坦度。充气(R.layout.grid_项,视图组,false);
v、 setTag(R.id.picture,v.findViewById(R.id.picture));
v、 setTag(R.id.text,v.findviewbyd(R.id.text));
}
picture=(ImageView)v.getTag(R.id.picture);
name=(TextView)v.getTag(R.id.text);
项目=获取项目(i);
毕加索.with(this.mContext).load(item.drawableId).into(图片);
name.setText(item.name);
系统输出打印项次(项目名称);
返回v;
}
私有静态类项{
公共最终字符串名;
公共最终字符串drawableId;
项(字符串名称、字符串drawableId){
this.name=名称;
this.drawableId=drawableId;
}
}
受保护的无效显示列表(){
试一试{
JSONObject jsonObj=新的JSONObject(myJSON);
movies=jsonObj.getJSONArray(标记结果);

对于(int i=0;i您正在从适配器调用
getData()
,因此,当您当时初始化它时,您的列表可能为空

尝试从活动或片段中调用该方法,然后在适配器类中传递接收到的数据

当您向上或向下滚动时,
getView()
会被多次调用,因此永远不要在该方法中调用任何api


提供使用此适配器的代码。

您正在从适配器调用
getData()
,因此在初始化时,列表可能为空

尝试从活动或片段中调用该方法,然后在适配器类中传递接收到的数据

当您向上或向下滚动时,
getView()
会被多次调用,因此永远不要在该方法中调用任何api


提供使用此适配器的代码。

问题是您没有从数据库中获取值


您必须首先从数据库获取值。通过使用Volley或类似的插件(或者Aysnc task.Volley,我认为会更好。)

问题是您没有从数据库获取值


您必须首先从数据库中获取值。通过使用Volley或类似的插件(或者Aysnc task.Volley,我认为会更好。)

您应该在showList()方法的for循环的list中添加数据您应该在showList()方法的for循环的list中添加数据我已经添加了使用适配器的片段代码。您必须将getData()放入和showList()然后,在收到响应后,您必须在适配器构造函数中创建一个记录和pas列表,该列表将起作用。谢谢,这修复了它。我应该在哪里调用api?您可以在片段类中的任何位置调用它,但请注意,要么在收到数据后初始化适配器并设置为gridview,要么不能tifyDatasetChanged()在收到数据后,我添加了使用适配器的片段代码。您必须将getData()和showList()放入然后,在收到响应后,您必须在适配器构造函数中创建一个记录和pas列表,该列表将起作用。谢谢,这修复了它。我应该在哪里调用api?您可以在片段类中的任何位置调用它,但请注意,要么在收到数据后初始化适配器并设置为gridview,要么不能tifyDatasetChanged()接收数据后,正确获取了值,但我无法确定应将getdata()放置在何处。正确获取了值,但无法确定应将getdata()放置在何处。
public class MovieFragment extends Fragment {


public MovieFragment() {
    // Required empty public constructor
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_movie, container, false);

    GridView gridView = (GridView)view.findViewById(R.id.gridview);
    gridView.setAdapter(new GridAdapter(getActivity()));

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i;
            switch (position){

                case 0:

                    i = new Intent(MovieFragment.this.getActivity(),MovieDetail.class);
                    startActivity(i);
                    break;
                case 1:
                    i = new Intent(MovieFragment.this.getActivity(),MovieDetail.class);
                    startActivity(i);
                    break;
                case 2:
                    i = new Intent(MovieFragment.this.getActivity(),MovieDetail.class);
                    startActivity(i);
                    break;
                case 3:
                    i = new Intent(MovieFragment.this.getActivity(),MovieDetail.class);
                    startActivity(i);
                    break;



            }


        }
    });

    return view;

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onDestroy() {
    super.onDestroy();
}



@Override
public void onDetach() {
    super.onDetach();
}
}