gpt4 book ai didi

php - 使用json将来自mysql的数据显示到fragment中的listview

转载 作者:行者123 更新时间:2023-11-29 20:50:32 43 4
gpt4 key购买 nike

我正在尝试使用 json 从数据库加载数据并将其显示在片段的 ListView 中。我有两个类,一类称为 downloader,一类称为perser。我想要的是将这些数据添加到 Fragmnet 中的 ListView 中。

我怎样才能实现这一点,因为它在 content_mani 中工作正常,但我希望它分段

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.ListView;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
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 info.androidhive.materialtabs.fragments.OneFragment;

/**
* Created by GEORGE on 25/06/2016.
*/
public class Downloader extends AsyncTask<Void ,Integer,String>{
Context c;
String urladdress;
ListView lv;
ProgressDialog progressDialog;

public Downloader(MainActivity context, ListView listView, String urladdress) {
this.c = context;
this.urladdress = urladdress;
this.lv = listView;
}
// before the job start
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog=new ProgressDialog(c);
progressDialog.setTitle("fetch data");
progressDialog.setMessage("fetching data.....please wait");
progressDialog.show();
}

@Override
protected String doInBackground(Void... params) {
String data=downloadData();
return data;
}

@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressDialog.dismiss();
if(s!=null){
Parser p=new Parser(c,s,lv);
p.execute();

}else {
Toast.makeText(c,"Unable to download data",Toast.LENGTH_LONG).show();

}
}
private String downloadData(){
InputStream inputStream=null;
String line=null;
try{
URL url=new URL(urladdress);
HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
inputStream=new BufferedInputStream(httpURLConnection.getInputStream());
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
StringBuffer stringBuffer=new StringBuffer();
if (bufferedReader!=null)
{
while ((line=bufferedReader.readLine())!=null)
{
stringBuffer.append(line+"\n");

}
}else
{
return null;
}
return stringBuffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream!=null)
{
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
and



package info.androidhive.materialtabs.activity;


import android.app.*;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.*;
import info.androidhive.materialtabs.R;

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

import java.util.*;


public class Parser extends AsyncTask<Void,Integer,Integer> {
Context c;
ListView lv;
String data;
ArrayList<String> users=new ArrayList<>();
ProgressDialog pd;

public Parser(Context c, String data, ListView lv) {
this.c = c;
this.data = data;
this.lv = lv;
}

@Override
protected void onPreExecute() {
super.onPreExecute();
pd=new ProgressDialog(c);
pd.setTitle("parser");
pd.setMessage("parsing....please wait");
pd.show();
}

@Override
protected Integer doInBackground(Void... params) {
return this.perse();

}

@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);

if(integer==1){
ArrayAdapter<String> adapter=new ArrayAdapter<String>(c, android.R.layout.simple_list_item_1,users);
lv.setAdapter(adapter);
}
else {
Toast.makeText(c,"Unable to perse",Toast.LENGTH_LONG).show();
}
pd.dismiss();
}
private int perse(){
try{
JSONArray ja=new JSONArray(data);
JSONObject jo=null;
users.clear();
for (int i=0;i<ja.length();i++){
jo=ja.getJSONObject(i);
String name=jo.getString("Category_name");
String id=jo.getString("idcategories");
users.add(name);
}

return 1;

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

}





package info.androidhive.materialtabs.fragments;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;

import info.androidhive.materialtabs.R;
import info.androidhive.materialtabs.activity.Downloader;


public class OneFragment extends Fragment{
Button btn_categories;
String urladdress="http://192.168.0.107/android/users.php";

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view =inflater.inflate(R.layout.fragment_one, container, false);
btn_categories = (Button) view.findViewById(R.id.btn_categories);
final ListView lv = (ListView) view.findViewById(R.id.lv);
//final Downloader downloader=new Downloader(this, lv, urladdress);
//downloader.execute();

return view;
}

}

最佳答案

我假设您可以从服务器正确检索 JSON 文件。以下代码是我为我的应用程序所做的。

class LoadDataAsyn extends AsyncTask<Void,Void,Void>{
JSONArray data;
@Override
protected void onPreExecute() {
super.onPreExecute();
// you can use ProgressDialog to indicate request start;
}

@Override
protected Void doInBackground(Void... params) {
//User is a custom class and contactlist return a Jsonarray
data = new User().ContactList();
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (data!=null){
if (adapter==null){
adapter = new CustomAdapter(context.this,data);
listView.setAdapter(adapter);
}else{
adapter.Refresh(data);
}
}
}
}

我在代码中的想法是将 JSON 数组直接传递给适配器在我的自定义类中:

public class CustomerAdapter extends BaseAdapter {
Context context;
JSONArray data;
public SearchSchoolAdapter (Context context,JSONArray data){
this.context= context;
this.data = data;
}
@Override
public int getCount() {
if (data!=null){
return data.length();
}
return 0;
}

@Override
public Object getItem(int position) {
return position;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
OneHolder holder;
if (convertView == null||!(convertView.getTag() instanceof OneHolder)){
convertView = LayoutInflater.from(context).inflate(R.layout.listrow_layout,null);
holder = new OneHolder();
holder.image = (ImageView)convertView.findViewById(R.id.pic);
holder.full =(TextView)convertView.findViewById(R.id.fullname);
convertView.setTag(holder);
}else{
holder = (OneHolder)convertView.getTag();
}
if (data!=null&&data.length()>position){
try {
JSONObject one = data.getJSONObject(position);
holder.full.setText(one.getString("name"));
} catch (JSONException e) {
e.printStackTrace();
}

}
return convertView;
}
class OneHolder {
ImageView image;
TextView full,abb;
}
public void Refersh(JSONArray data){
this.data=data;
notifyDataSetChanged();
}

}不知道你问的是不是这个,希望对你有帮助。

关于php - 使用json将来自mysql的数据显示到fragment中的listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38095851/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com