【问题标题】:how to display fetched json data into listview using baseadapter如何使用 baseadapter 将获取的 json 数据显示到列表视图中
【发布时间】:2014-02-09 17:51:47
【问题描述】:

我是 android 和 java 的新手。最近我在使用 baseadapter 将获取的 json 数据显示到 listview 时遇到问题。 一开始我用过这段代码

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

   new TheTask().execute();
  }
     class TheTask extends AsyncTask<Void,Void,String>
  {

@Override
protected String doInBackground(Void... params) {
    String str = null;
    try
    {
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
      HttpResponse response = httpclient.execute(httppost);
      str =  EntityUtils.toString(response.getEntity());     
    } 
    catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        }

    return str;

  }



@Override
    protected void onPostExecute(String result) {

    super.onPostExecute(result);

    String response = result.toString();
    try {


        ArrayList<String> stringArray = new ArrayList<String>();

        JSONArray new_array = new JSONArray(response);

        for(int i = 0, count = new_array.length(); i< count; i++)
        {
            try {
                JSONObject jsonObject = new_array.getJSONObject(i);
                stringArray.add(jsonObject.getString("title").toString());


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




        ArrayAdapter<String> adapter = new ArrayAdapter<String>   (MainActivity.this,R.layout.test_tuh,stringArray);            
        ListView list= (ListView) findViewById(R.id.listView1);
        list.setAdapter(adapter);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        //tv.setText("error2");
    } 


}
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
  }

此代码成功显示获取的 json 数据。但它只显示一行。我需要在列表视图中超过一(两)行。所以我试过这段代码 它不起作用,它显示一个空白屏幕。

我的代码如下,

 class TheTask extends AsyncTask<Void,Void,String>
  {

    @Override
    protected String doInBackground(Void... params) {
    String str = null;
    try
    {
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
      HttpResponse response = httpclient.execute(httppost);
      str =  EntityUtils.toString(response.getEntity());     
    } 
    catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        }

    return str;

  }


@Override
    protected void onPostExecute(String result) {


    // TODO Auto-generated method stub
    super.onPostExecute(result);

    String response = result.toString();
    try {
         arrayList=new ArrayList<get_set>();

        ArrayList<String> stringArray = new ArrayList<String>();

        JSONArray new_array = new JSONArray(response);



        for(int i = 0, count = new_array.length(); i< count; i++)
        {
            try {
                JSONObject jsonObject = new_array.getJSONObject(i);
                stringArray.add(jsonObject.getString("title").toString());


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



   ListView listView;
    adap= new BaseAdapter() {
        LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        @Override
        public View getView(int position, View view, ViewGroup viewgroup) {
            if (view==null) {
                view=inflater.inflate(R.layout.bsdi, null);
            }
            TextView title_tuh=(TextView) view.findViewById(R.id.title1);
            TextView notice_tuh=(TextView) view.findViewById(R.id.notice1);


            title_tuh.setText(arrayList.get(position).getTitle());
            notice_tuh=.setText(arrayList.get(position).getNotice());
            return view;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return arrayList.get(position);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return arrayList.size();
        }
    };


    listView=(ListView) findViewById(R.id.listView1);
    listView.setAdapter(adap);


    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        //tv.setText("error2");
    } 


}

据我所知,问题就在这里

ArrayList<String> stringArray = new ArrayList<String>();

        JSONArray new_array = new JSONArray(response);



        for(int i = 0, count = new_array.length(); i< count; i++)
        {
            try {
                JSONObject jsonObject = new_array.getJSONObject(i);
                stringArray.add(jsonObject.getString("title").toString());


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

据我推测,提取的 json 数据存储在 stringArray 中,但以后不会使用。如果我尝试像这样使用它,那么我会收到错误

title_tuh.setText(stringArray .get(position).getTitle());
notice_tuh=.setText(stringArray .get(position).getNotice());

如果我尽量不使用 ArrayList stringArray = new ArrayList();

并使用
数组列表=新数组列表();相反,像这样我也会出错。

    arrayList=new ArrayList<get_set>();


        JSONArray new_array = new JSONArray(response);


        //JSONArray jsonArray = new JSONArray();
        for(int i = 0, count = new_array.length(); i< count; i++)
        {
            try {
                JSONObject jsonObject = new_array.getJSONObject(i);
                arrayList.add(jsonObject.getString("title").toString());
               // String in = mInflater.inflate(R.layout.custom_row_view, null);

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

我不知道如何解决这个问题。我看过很多在线教程,但这些对我没有帮助。请帮帮我。

【问题讨论】:

  • 你的问题到底是什么?
  • 我尝试获取 json 数据并将其显示到列表视图中。我已成功从 PHP 获取 json dta 并将其显示到单行列表视图中。但我需要将它显示到多行列表视图中。我的问题就在这里。我想显示多行 listview 。在每一行中,第一行是“title”,第二行是“notice”。我已经分享了上面的代码,让您了解我的尝试,以便您找出我的错在哪里
  • 这里你需要实现 BaseAdpater 而不是 ArrayAdapter。
  • 如果你用简单的代码指导我,那对我会有帮助。
  • 使用Retrofit2服务freakyjolly.com/…获取的JSON使用BaseAdapter构建listView的教程

标签: android json listview


【解决方案1】:

首先你需要创建row_listitem.xml 文件,例如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:background="@drawable/list_selector"
android:orientation="vertical"
android:padding="5dp" >

<ImageView
    android:id="@+id/iv_icon_social"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_centerVertical="true"
    android:background="@drawable/image_border"
    android:src="@drawable/sms_t"
    android:visibility="gone" />

<LinearLayout
    android:id="@+id/thumbnail"
    android:layout_width="fill_parent"
    android:layout_height="85dp"
    android:layout_marginRight="50dp"
    android:layout_marginTop="0dp"
    android:layout_toRightOf="@+id/iv_icon_social"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:padding="5dip"
    android:visibility="visible" >

    <TextView
        android:id="@+id/txt_ttlsm_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:text="Sample text"
        android:textSize="18dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/txt_ttlcontact_row2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="0dp"
        android:layout_marginTop="3dp"
        android:paddingLeft="10dp"
        android:maxEms="20"
        android:maxLines="2"
        android:singleLine="false"
        android:ellipsize="end"
        android:text="Sample text2"
        android:textColor="#808080"
        android:textSize="15dp"
        android:textStyle="normal"
        android:visibility="visible" />


</LinearLayout>

</RelativeLayout>

现在,您需要创建 Custom BaseAdapter,例如:

  public class BaseAdapter2 extends BaseAdapter {

private Activity activity;
// private ArrayList&lt;HashMap&lt;String, String&gt;&gt; data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;

public BaseAdapter2(Activity a, ArrayList b, ArrayList bod) {
    activity = a;
    this.title = b;
    this.notice=bod;

    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {
    return title.size();
}

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

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

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.row_listitem, null);

    TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title
    String song = title.get(position).toString();
    title2.setText(song);


    TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice
    String song2 = notice.get(position).toString();
    title22.setText(song2);

return vi;

}

}

现在,您可以设置您的主要活动,例如:

public class MainActivity extends Activity {

ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
BaseAdapter2 adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list = (ListView) findViewById(R.id.listView1);
    new TheTask().execute();
}

class TheTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        String str = null;
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(
                    "http://10.0.2.2/BSDI/show.php");
            HttpResponse response = httpclient.execute(httppost);
            str = EntityUtils.toString(response.getEntity());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return str;

    }



@Override
protected void onPostExecute(String result) {

    super.onPostExecute(result);

    String response = result.toString();
    try {


        JSONArray new_array = new JSONArray(response);

        for (int i = 0, count = new_array.length(); i < count; i++) {
            try {
                JSONObject jsonObject = new_array.getJSONObject(i);
                title_array.add(jsonObject.getString("title").toString());
                notice_array.add(jsonObject.getString("notice").toString());

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

        adapter = new BaseAdapter2(MainActivity.this, title_array, notice_array);
        list.setAdapter(adapter);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        // tv.setText("error2");
    }

}
}

 }

【讨论】:

  • 谢谢。但是运行应用程序后,它崩溃了。尝试了大约一个小时后,我未能找出原因。你对此有什么解决办法吗?
  • @MushfiqulTuhin 发布你的日志
  • 今天尝试后我已经解决了这个问题。顺便说一句,非常感谢您的帮助。它现在运行良好。
  • @SimplePlan 你是如何解决这个问题的?我收到 JSONException: End of input at character 0
  • @MushfiqulTuhin 你是怎么解决这个问题的?我收到 JSONException: End of input at character 0
【解决方案2】:

@Allen Chun ,实际上我目前并不认为我在代码中所做的更改是为了完美地运行我的代码。但我正在分享我所有运行良好的代码。

这是我的布局代码,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/fsr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Notice Board"
    android:textSize="20px" />

   <TextView
    android:id="@+id/err_msg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:gravity="center" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="match_parent" 

    android:id="@+id/list_notice2"

    android:layout_gravity="center" />




</LinearLayout>

这是我的自定义列表视图布局代码,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" 
    android:paddingTop="10dp"
    android:layout_gravity="center"
      android:textAppearance="?android:attr/textAppearanceMedium" />
    />

<TextView
    android:id="@+id/notice"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Small Text"
    android:paddingTop="5dp"
    android:layout_gravity="center"
    android:textAppearance="?android:attr/textAppearanceSmall" />

</LinearLayout>

我的活动名为“NoticeBoard”。

public class NoticeBoard extends Activity {


ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();

ListView list;
base_adapter3 adapter;
 TextView f,msg;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_notice);
    list = (ListView) findViewById(R.id.list_notice2);
    msg=(TextView) findViewById(R.id.err_msg);
    new test_ays().execute();
}




class test_ays extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        String str = null ;
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");

            HttpResponse response = httpclient.execute(httppost);
            str = EntityUtils.toString(response.getEntity());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();



        }
        return str;


    }



@Override
protected void onPostExecute(String result) {

    super.onPostExecute(result);
    if(result!=null) // add this
    {  
     String response = result.toString();


   try {

        JSONArray new_array = new JSONArray(response);

        for (int i = 0, count = new_array.length(); i < count; i++) {
            try {
                JSONObject jsonObject = new_array.getJSONObject(i);
                title_array.add(jsonObject.getString("title").toString());
                notice_array.add(jsonObject.getString("notice").toString());

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

            }
        }

        adapter = new base_adapter3(NoticeBoard.this, title_array, notice_array);
      list.setAdapter(adapter);
       // f=(TextView) findViewById(R.id.textTuh);
       // f.setText(title_array);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
       e.printStackTrace();

        // tv.setText("error2");
    }
    }

    else{
        msg.setText("You need a working data connection...");
    }


}
}

}

它是我的自定义 baseadapter 代码,

public class base_adapter2 extends BaseAdapter {


    private Activity activity;
    //private ArrayList&lt;HashMap&lt;String, String&gt;&gt; data;
    private static ArrayList title,notice;
    private static LayoutInflater inflater = null;

    public base_adapter2(Activity a, ArrayList b) {
      activity = a;
      this.title = b;
     // this.notice=bod;

      inflater = (LayoutInflater) activity
              .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
      return title.size();
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
      View vi = convertView;
      if (convertView == null)
          vi = inflater.inflate(R.layout.bsdi_adapter, null);


      TextView title2 = (TextView) vi.findViewById(R.id.txt1); // title
      String song = title.get(position).toString();
      title2.setText(song);



    return vi;

    }

}

【讨论】:

    【解决方案3】:

    在这个例子中,我连接到 Twitter 的公共时间线 JSON url。

    package net.inchoo.demo.andy1;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    
    public class HomeActivity extends ListActivity {
    
        /** Called when the activity is first created. */
        @SuppressWarnings({ "rawtypes", "unchecked" })
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline()));        
        }
    
        public ArrayList<String> fetchTwitterPublicTimeline()
        {
            ArrayList<String> listItems = new ArrayList<String>();
    
            try {
                URL twitter = new URL(
                        "http://twitter.com/statuses/public_timeline.json");
                URLConnection tc = twitter.openConnection();
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        tc.getInputStream()));
    
                String line;
                while ((line = in.readLine()) != null) {
                    JSONArray ja = new JSONArray(line);
    
                    for (int i = 0; i < ja.length(); i++) {
                        JSONObject jo = (JSONObject) ja.get(i);
                        listItems.add(jo.getString("text"));
                    }
                }
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return listItems;
        }
    }
    

    请将您的注意力放在 listItems.add(jo.getString(“text”)); 行上。这是我获取单个 JSON 对象的“文本”属性/属性的部分。要获得所有可用属性/属性的更“可视化”图片,您可能需要查看 Twitter 公共时间线的 XML 版本。这样,您将在浏览器中获得漂亮的彩色 XML,您可以在其中看到所有可用的属性。

    链接:http://inchoo.net/dev-talk/android-development/simple-android-json-parsing-example-with-output-into-listactivity/

    【讨论】:

      【解决方案4】:

      Json 解析器:

      public class jparser {
      
      static InputStream istream = null;
      static JSONObject jObj = null;
      //static JSONArray jarray=null;
      static String json = "";
      //static JSONArray jarray = null;
      
      // constructor
      public jparser() {
      }
      
      public JSONObject getJFromUrl(String url) {
          // Making HTTP request
          //try {
              // defaultHttpClient
               StringBuilder builder = new StringBuilder();
      
              DefaultHttpClient httpClient = new DefaultHttpClient();
              HttpPost httpPost = new HttpPost(url);
              /*HttpResponse httpResponse = httpClient.execute(httpPost);
              HttpEntity httpEntity = httpResponse.getEntity();
              istream = httpEntity.getContent();*/
              try{
              HttpResponse response = httpClient.execute(httpPost);
      
              StatusLine statusLine = response.getStatusLine();
      
              int statusCode = statusLine.getStatusCode();
      
               if (statusCode == 400) 
               {
                 HttpEntity entity = response.getEntity();
      
                 InputStream content = entity.getContent();
      
                 BufferedReader reader = new BufferedReader(new InputStreamReader(content));
      
                 String line;
      
                 while ((line = reader.readLine()) != null) 
                 {
                   builder.append(line);
                 }
               } 
               else
               {
                   Log.e("==>", "Failed to download file");
               }
          } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
          } catch (ClientProtocolException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
      
          try {
              BufferedReader reader = new BufferedReader(new InputStreamReader(istream, "iso-8859-1"), 8);
              StringBuilder sb = new StringBuilder();
              String line = null;
              while ((line = reader.readLine()) != null) {
                  sb.append(line + "\n");
              }
              istream.close();
              json = sb.toString();
          } catch (Exception e) {
              Log.e("Buffer Error", "Error converting result " + e.toString());
          }
          // try parse the string to a JSON object
          try {
              jObj = new JSONObject(json);
          } catch (JSONException e) {
              Log.e("JSON Parser", "Error parsing data " + e.toString());
          }
          // return JSON String
          return jObj;
      
         // Parse String to JSON object
      
           /*try {
                  jarray = new JSONArray( builder.toString());
              } catch (JSONException e) {
                  Log.e("JSON Parser", "Error parsing data " + e.toString());
              }
      
              // return JSON Object
              return jarray;
      
          }*/
          }
      
      }
      

      【讨论】:

        【解决方案5】:
                    public class JSONParser {
        
                        static InputStream is = null;
                        static JSONObject jObj = null;
                        static String json = "";
        
                        // constructor
                        public JSONParser() {
        
                        }
        
                        // function get json from url
                        // by making HTTP POST or GET mehtod
                        @SuppressLint("NewApi")
                        public JSONObject makeHttpRequest(String url, String method,
                                                          List<NameValuePair> params) {
        
                            // Making HTTP request
                            try {
                                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                                StrictMode.setThreadPolicy(policy);
                                // check for request method
                                if(method == "POST"){
                                    // request method is POST
                                    // defaultHttpClient
                                    DefaultHttpClient httpClient = new DefaultHttpClient();
                                    HttpPost httpPost = new HttpPost(url);
                                    httpPost.setEntity(new UrlEncodedFormEntity(params));
        
                                    HttpResponse httpResponse = httpClient.execute(httpPost);
                                    HttpEntity httpEntity = httpResponse.getEntity();
                                    is = httpEntity.getContent();
        
                                }else if(method == "GET"){
                                    // request method is GET
                                    DefaultHttpClient httpClient = new DefaultHttpClient();
                                    String paramString = URLEncodedUtils.format(params, "utf-8");
                                    url += "?" + paramString;
                                    HttpGet httpGet = new HttpGet(url);
        
                                    HttpResponse httpResponse = httpClient.execute(httpGet);
                                    HttpEntity httpEntity = httpResponse.getEntity();
                                    is = httpEntity.getContent();
                                }
        
        
                            } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                            } catch (ClientProtocolException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
        
                            try {
                                BufferedReader reader = new BufferedReader(new InputStreamReader(
                                        is, "iso-8859-1"), 8);
                                StringBuilder sb = new StringBuilder();
                                String line = null;
                                while ((line = reader.readLine()) != null) {
                                    sb.append(line + "\n");
                                }
                                is.close();
                                json = sb.toString();
                            } catch (Exception e) {
                                Log.e("Buffer Error", "Error converting result " + e.toString());
                            }
        
                            // try parse the string to a JSON object
                            try {
                                jObj = new JSONObject(json);
                            } catch (JSONException e) {
                                Log.e("JSON Parser", "Error parsing data " + e.toString());
                            }
        
                            // return JSON String
                            return jObj;
        
                        }
                    }
        
        
                <h1>Model</h1>
                public class WorkModel {
        
                    public String getId() {
                        return id;
                    }
        
                    public void setId(String id) {
                        this.id = id;
                    }
        
                    public String getName() {
                        return name;
                    }
        
                    public void setName(String name) {
                        this.name = name;
                    }
        
                    public String getImagename() {
                        return imagename;
                    }
        
                    public void setImagename(String imagename) {
                        this.imagename = imagename;
                    }
        
                    String id,name,imagename;
        
                    public WorkModel(String s1,String s2,String s3)
                    {
                        this.id=s1;
                        name=s2;
                        imagename=s3;
                    }
                }
        
            <h1>listview fill</h1>
            public class Work_in_process extends Fragment {
        
                //////////////jsonparser implement
                JSONParser jsonparser=new JSONParser();
                JSONArray json_users=null;
                JSONObject json;
                /////////
        
                ListView lst;
                ArrayList<WorkModel> data=new ArrayList<WorkModel>();
                WorkAdapter adapter;
                Context con;
                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                         Bundle savedInstanceState) {
                    View rootView = inflater.inflate(R.layout.fragment_work_in_process, container, false);
                        con=this.getActivity();
                        lst=(ListView)rootView.findViewById(R.id.work_listview);
        
                        new work_process().execute();
        
                    // Inflate the layout for this fragment
                    return rootView;
                }
        
                class  work_process extends AsyncTask<String,String,String>
                {
                    public Dialog pDialog;
                    @Override
                    protected void onPreExecute() {
                        super.onPreExecute();
        
                        pDialog = new ProgressDialog(con);
                    pDialog.setMessage("Loading... Please wait...");
                    pDialog.setIndeterminate(true);
                    pDialog.setCancelable(true);
                    pDialog.show();
                    }
        
                    @Override
                    protected String doInBackground(String... args) {
                        data.clear();
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
        
                        json = jsonparser.makeHttpRequest("your url","POST", params);
        
                        try {
                            int success = json.getInt("status");
                            if (success == 0)
                            {
                                return  "kbc";
                            }
                            else
                            {
        
                                json_users = json.getJSONArray("result");
                                // looping through All Products
                                for (int i = 0; i < json_users.length(); i++) {
                                    JSONObject c = json_users.getJSONObject(i);
                                    String t1 = c.getString("id");
                                    String t2 = c.getString("work_title");
                                    String t3 = c.getString("image_path");
                                    WorkModel da=new WorkModel(t1,t2,t3);
                                    data.add(da);
                                }
        
                                return "abc";
                            }
        
                        } catch (JSONException e) {
                            e.printStackTrace();
        
                        }
        
                        return null;
                    }
        
                    @Override
                    protected void onPostExecute(String s) {
                        super.onPostExecute(s);
                        pDialog.dismiss();
                        if(s.equals("abc"))
                        {
                            adapter = new WorkAdapter(con, data);
                            lst.setAdapter(adapter);
                            adapter.notifyDataSetChanged();
                        }
                        else
                        {
        
                        }
                    }
                }
            }
        
        <h1>Adapter fill listview</h1>
        public class WorkAdapter extends BaseAdapter {
        
            private LayoutInflater inflater1=null;
            private static String string=null;
            ArrayList<WorkModel> data=null;
            Context activity;
            DisplayImageOptions options;
            protected ImageLoader imageLoader = ImageLoader.getInstance();
        
            public WorkAdapter(Context act,ArrayList<WorkModel> da)
            {
                activity=act;
                data=da;
            }
        
            @Override
            public int getCount() {
                return data.size();
            }
        
            @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) {
        
                View vi=convertView;
                if(convertView==null)
                {
                    inflater1=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    vi=inflater1.inflate(R.layout.list_work,null);
                }
        
                TextView name;
                ImageView img;
                name=(TextView)vi.findViewById(R.id.list_work_name);
                img= (ImageView)vi.findViewById(R.id.list_work_img);
                WorkModel da=new WorkModel(string,string,string);
                da=data.get(position);
        
                final String p1,p2,p3;
                p1=da.getId();
                p2=da.getName();
                p3=da.getImagename();
        
                name.setText(p2);
                imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
        
                final String imgpath=""+p3;
                options = new DisplayImageOptions.Builder()
        
                        .showImageOnLoading(R.drawable.wp_loading)
                        .showImageForEmptyUri(R.drawable.wp_loading)
                        .showImageOnFail(R.drawable.wp_loading)
                        .cacheInMemory(true)
                        .cacheOnDisk(true)
                        .build();
        
                imageLoader.displayImage(imgpath, img,options);
        
                img.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        DisplayImageOptions options;
                        final ImageLoader imageLoader = ImageLoader.getInstance();
        
                        final Dialog emailDialog =new Dialog(activity, android.R.style.Theme_DeviceDefault);
                        emailDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        
                        emailDialog.setCancelable(true);
                        emailDialog.setContentView(R.layout.zoom_imge);
        
                        ImageView image = (ImageView) emailDialog.findViewById(R.id.zoom_image_img);
                        emailDialog.show();
        
                        final String imgpath=""+p3;
                        options = new DisplayImageOptions.Builder()
                                .showImageOnLoading(R.drawable.wp_loading)
                                .showImageForEmptyUri(R.drawable.wp_loading)
                                .showImageOnFail(R.drawable.wp_loading)
                                .cacheInMemory(true)
                                .cacheOnDisk(true)
                                .build();
        
                        imageLoader.displayImage(imgpath, image, options);
                    }
                });
        
        
        
        
                return vi;
            }
        }
        

        【讨论】:

          【解决方案6】:

          获取时间表

          public class GetSchedule extends Activity {
          
              // JSON Node Names
              private static final String TAG_SNO = "sno";
              private static final String TAG_STNCODE = "stnCode";
              private static final String TAG_STATION = "station";
              // private static final String TAG_ROUTENO= "routeNo";
              private static final String TAG_ARRIVALTIME = "arrivalTime";
              private static final String TAG_DEPTIME = "depTime";
          
              private JSONArray station = null;
          
              private ListView list;
              //private static String url = "http://railpnrapi.com/api/route/train/";
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_get_schedule);
          
                  try {
                      ArrayList<HashMap<String, String>> stnNamelist = new    ArrayList<HashMap<String, String>>();
          
                      // Getting JSON Array
                      // JSONObject job = new JSONObject();
                      //JSONArray jArray = ModuleClass.trainScheduleJSONObject.getJSONArray("stnName");
                      JSONObject json_data = null;
                      station= ModuleClass.trainScheduleJSONObject.getJSONArray(TAG_STATION);
                      for (int i = 0; i < station.length(); i++) {
                          json_data = station.getJSONObject(i);
          
                          // JSONObject c = stnName.getJSONObject(0);
          
                          // Storing  JSON item in a Variable
          
                          String sno = json_data.getString(TAG_SNO);
                          String stnCode = json_data.getString(TAG_STNCODE);
                          // String distance= c.getString(TAG_DISTANCE);
                          // String routeNo = c.getString(TAG_ROUTENO);
                          String arrivalTime = json_data.getString(TAG_ARRIVALTIME);
                          String depTime = json_data.getString(TAG_DEPTIME);
                          // String haltTime = c.getString(TAG_HALTTIME);
                          // String tday= c.getString(TAG_TDAY);
                          // String remark = c.getString(TAG_REMARK);
                          // Adding value HashMap key => value
                          stnNamelist = new ArrayList<HashMap<String, String>>();
          
                          HashMap<String, String> map = new HashMap<String, String>();
                          map.put(TAG_SNO, sno);
                          map.put(TAG_STNCODE, stnCode);
                          map.put(TAG_DEPTIME, depTime);
                          map.put(TAG_ARRIVALTIME, arrivalTime);
                          // map.put(TAG_DEPTIME,depTime );
          
                          stnNamelist.add(map);
                          list = (ListView) findViewById(R.id.listView1);
                          final SimpleAdapter sd;
                          sd = new SimpleAdapter(this, stnNamelist, R.layout.activity_get_schedule, 
                                  new String[] { TAG_SNO, TAG_STNCODE, TAG_ARRIVALTIME, TAG_DEPTIME },
                                  new int[] { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4});
                          list.setAdapter(sd);
                          /*
                           * list.setOnItemClickListener(new
                           * AdapterView.OnItemClickListener() {
                           * 
                           * @Override public void onItemClick(AdapterView<?> parent, View
                           * view, int position, long id) { Toast.makeText(
                           * MainActivity.this, "You Clicked at " +
                           * stnNamelist.get(+position).get( "name"), Toast.LENGTH_SHORT)
                           * .show(); } });
                           */
                      }
                      // Set JSON Data in TextView
                      // uid.setText(id);
                      // name1.setText(name);
                      // email1.setText(email);
                  } catch (JSONException e) {
                      e.printStackTrace();
                  }
              }
          
          
                  @Override
                  public boolean onCreateOptionsMenu(Menu menu) {
                  // Inflate the menu; this adds items to the action bar if it is present.
                  getMenuInflater().inflate(R.menu.get_schedule, menu);
                  return true;
              }
          
          }
          

          【讨论】:

            【解决方案7】:

            ListView 来自使用 Retrofit2 服务获取的 JSON 数据

            JSON 响应

            {
              "results": [
                {
                  "phone": "+9178XXXX66",
                  "name": "Olivia"
                },
                {
                  "phone": "+9178XXXX66",
                  "name": "Isla"
                },
                {
                  "phone": "+9178XXXX66",
                  "name": "Emily"
                },
                {
                  "phone": "+9178XXXX66",
                  "name": "Amelia"
                },
                {
                  "phone": "+9178XXXX66",
                  "name": "Sophia"
                }],
              "statusCode": "1",
              "count": "2"
            }
            

            MainActivity.java 中,我们将 JSON 数据作为 ArrayList(dummyData)

            传递
                customListAdapter = new CustomListAdapter(getApplicationContext(), dummyData);
                listView = (ListView) findViewById(R.id.listShowJSONData);
                listView.setAdapter(customListAdapter);
            

            在自定义 BaseAdapter 我们的

            ...
            ...
            @Override
            public MyModel getItem(int i) {
                return this.users.get(i);
            }
            
            @Override
            public long getItemId(int i) {
                return i;
            }
            
            
            @Override
            public View getView(final int i, View view, ViewGroup viewGroup) {
                if(view==null)
                {
                    view= LayoutInflater.from(c).inflate(R.layout.json_data_list,viewGroup,false);
                }
            
                TextView mUserDetails = (TextView) view.findViewById(R.id.userDetails);
                TextView mUserStatus = (TextView) view.findViewById(R.id.userStatus);
            
            
                Object getrow = this.users.get(i);
                LinkedTreeMap<Object,Object> rowmap = (LinkedTreeMap) getrow;
                String name = rowmap.get("name").toString();
                String phone = rowmap.get("phone").toString();
            
                mUserDetails.setText(name);
                mUserStatus.setText(phone);
            
                return view;
            }
            ...
            ...
            

            这里 MyModel 将用作我们将从服务中获得的响应的自定义映射模型

            完整代码说明见link

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-01-06
              • 1970-01-01
              • 2017-03-30
              • 2017-11-30
              • 1970-01-01
              • 2023-03-11
              相关资源
              最近更新 更多