2016-06-29 22 views
0

jsonを使用してデータベースからデータをロードし、それをフラグメントビューのリストビューに表示しようとしています。私は2つのクラスを持っています.1つはダウンローダ、もう1つはperserです。私が望むのは、このデータをfragmnetのlistviewに追加することです。それはcontent_maniで正常に動作が、私はそれは私はあなたが正しくサーバからJSONファイルを取り出すことができると仮定しjsonを使用してmysqlからデータを表示し、フラグメント内のリストビュー

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; 
    } 

} 
+0

PHPタグが間違っています、それはPHPコードではありません – newage

答えて

0

断片化したいので、私はこれを達成するにはどうすればよい

。次のコードは、私のアプリケーションのためにしたものです。

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(); 
} 

} これはあなたが求めているものであれば、私は知りません、それがあなたを助けることを願ってください。

関連する問題