Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách JSON phân tích cú pháp hình ảnh từ mysql và điền listview

Nếu vấn đề của bạn là dữ liệu bạn muốn xuất ra dưới dạng http://www.spinner.bl.ee/images/ATE.png sắp ra mắt dưới dạng http:\/\/spinner.bl.ee\/images\/ATE.png , đó không phải là vấn đề đối với org.json.JSONObject khi nó tải chuỗi từ url của bạn đến một JSONObject; bạn đã kiểm tra mã này chưa?

Đây là cách triển khai một số AsyncTasks truy cập vào máy chủ của bạn; chỉ có một hoạt động, MainActivity.java và sau đó là một đối tượng StockInformation.java.

public class MainActivity extends Activity {

    ProgressDialog pDialog;
    ListView listView;
    private StockAdaptor stockAdaptor;
    String jsonResult = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_); //Just a listView, shown below
        listView = (ListView) findViewById(android.R.id.list);
        new JsonReadTask().execute("http://spinner.bl.ee/getstocks.php"); //YOUR URL JSON SERVER, IF IT IS DIFFERENT FROM THAT SUPPLIED ABOVE
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return true; //No options
    }

    public void onStart() {
        super.onStart();

        stockAdaptor = new StockAdaptor(this); //Create a new StockAdaptor
    }

    public static String strFromStream(InputStream in) throws IOException { //Simple function, getting a String from an InputStream
        StringBuilder out = new StringBuilder();
        BufferedReader breader = new BufferedReader(new InputStreamReader(in));
        String cline;
        String newLine = System.getProperty("line.separator");
        while ((cline = breader.readLine()) != null) {
            out.append(cline);
            out.append(newLine);
        }
        return out.toString();
    }

    private class StockAdaptor extends BaseAdapter { //The stocks list adaptor

        class ViewHolder {
            TextView name;
            TextView price;
            ImageView image; 
        }

        private LayoutInflater layoutInflater;
        private StockInformation[] stocks = null; //Array of stocks
        private ListView stocksListView = null;

        public StockAdaptor(Context context) {
            super();
            layoutInflater = LayoutInflater.from(context);
        }

        public void setStockList(StockInformation[] stocksinfo) {
            this.stocks = stocksinfo;// //////////////LITERALLY THIS

        }

        @Override
        public int getCount() {
            return stocks.length;
        }

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

        public StockInformation[] getAll() { //Return the array of stocks
            return stocks;
        }

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

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder; //New holder
            if (convertView == null) {
                convertView = layoutInflater.inflate(R.layout.list_item,
                        null);
                holder = new ViewHolder();
                // Creates the new viewholder define above, storing references to the children
                holder.name = (TextView) convertView.findViewById(R.id.name);
                holder.price = (TextView) convertView.findViewById(R.id.price);
                holder.image = (ImageView) convertView.findViewById(R.id.image);

                stocksListView = (ListView) findViewById(android.R.id.list);

                if (holder.image != null) {
                    if (holder.image.getDrawable() == null) {
                        new ImageDownloaderTask(holder.image, null)                                 .execute(stocks[position].imageurl); //Download the image using the imageurl

                    }
                }
                convertView.setTag(holder);
            } else {
                stocksListView = (ListView) findViewById(android.R.id.list);
                holder = (ViewHolder) convertView.getTag();
            }

            holder.name.setText(stocks[position].name);
            holder.price.setText(stocks[position].price);

            return convertView;
        }
    }

    private class JsonReadTask extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setTitle("waiting");
            pDialog.setMessage("getting stocks");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            if (URLUtil.isValidUrl(params[0])) {
                final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
                final HttpGet getRequest = new HttpGet(params[0]);
                try {
                    HttpResponse response = client.execute(getRequest);
                    final HttpEntity httpentity = response.getEntity();
                    if (httpentity != null){
                        InputStream inputStream = null;
                        try {
                            inputStream = httpentity.getContent();
                            jsonResult = strFromStream(inputStream);
                            Log.i("", jsonResult);
                            return jsonResult;
                        } catch (IllegalArgumentException e) {
                            //
                        } finally {
                            httpentity.consumeContent();
                        }
                    }
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    client.close();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {

            ListDrwaer();
            pDialog.dismiss();
        }

    }// end async task

    // build hash set for list view
    public void ListDrwaer() {

        try {
            if (jsonResult!=null) {
                JSONObject jsonResponse = new JSONObject(jsonResult);
                JSONArray jsonMainNode = jsonResponse.optJSONArray("metoxes");
                Vector<StockInformation> vstocks = new Vector<StockInformation>();
                for (int i = 0; i < jsonMainNode.length(); i++) {
                    JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
                    StockInformation stock = new StockInformation();
                    stock.name = jsonChildNode.optString("name");
                    stock.price = jsonChildNode.optString("price");
                    stock.imageurl = jsonChildNode.getString("image");
                    Log.i("StockLog", stock.name + stock.price + stock.imageurl);
                    vstocks.add(stock);
                }
                StockInformation[] stocks = new StockInformation[jsonMainNode.length()];

                int stockscount = jsonMainNode.length();
                for (int n = 0; n < stockscount; n++) 
                {               
                    stocks[n] = vstocks.get(n);
                }
                stockAdaptor.setStockList(stocks);
                listView.setAdapter(stockAdaptor);
            } else {
                Toast.makeText(getApplicationContext(), "Error; jsonResult null",
                        Toast.LENGTH_SHORT).show();
            }
        } catch (JSONException e) {
            Toast.makeText(getApplicationContext(), "Error" + e.toString(),
                    Toast.LENGTH_SHORT).show();
        }
    }

    private class ImageDownloaderTask extends AsyncTask<String, Void, Bitmap> {
        private final WeakReference<ImageView> imageViewReference;

        public ImageDownloaderTask(ImageView imageView, View view) {
            imageViewReference = new WeakReference<ImageView>(imageView);
        }

        @Override
        // Actual download method, run in the task thread
        protected Bitmap doInBackground(String... params) {
            // params comes from the execute() call: params[0] is the url.
            return downloadBitmap(params[0]);
        }

        @Override
        // Once the image is downloaded, associates it to the imageView
        protected void onPostExecute(Bitmap bitmap) {
            if (isCancelled()) {
                bitmap = null;
            }

            if (imageViewReference != null) {
                ImageView imageView = imageViewReference.get();
                if (imageView != null) {

                    if (bitmap != null) {
                        imageView.setImageBitmap(bitmap);
                    } else {
                        //
                    }
                }

            }

        }

        Bitmap downloadBitmap(String url) {
            if(URLUtil.isValidUrl(url)){

                final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
                final HttpGet getRequest = new HttpGet(url);
                try {
                    HttpResponse response = client.execute(getRequest);
                    final int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode != HttpStatus.SC_OK) {
                        Log.w("ImageDownloader", "Error " + statusCode
                                + " while retrieving bitmap from " + url);
                        return null;
                    }

                    final HttpEntity entity = response.getEntity();
                    if (entity != null) {
                        InputStream inputStream = null;
                        try {
                            inputStream = entity.getContent();
                            try {
                                byte[] buffer = new byte[8192];
                                int bytesRead;
                                ByteArrayOutputStream output = new ByteArrayOutputStream();
                                while ((bytesRead = inputStream.read(buffer)) != -1) {
                                    output.write(buffer, 0, bytesRead);
                                }   
                                return BitmapFactory.decodeByteArray(output.toByteArray(), 0, output.toByteArray().length);
                            } catch (IllegalArgumentException e) {
                                e.printStackTrace();
                                Log.i("IAE", "in stocks");
                                return null;
                            }
                        } finally {
                            if (inputStream != null) {
                                inputStream.close();
                            }
                            entity.consumeContent();
                        }
                    }
                } catch (Exception e) {
                    getRequest.abort();
                    Log.w("ImageDownloader", "Error while retrieving bitmap from " + url);
                } finally {
                    if (client != null) {
                        client.close();
                    }
                }
                return null;

            }
            return null;
        }

    }
}

Được xác định riêng biệt:StockInformation.java; đối tượng chứng khoán.

public class StockInformation {
    public String name;
    public String price;
    public String imageurl; 
}

Và sau đó là các tệp xml:activity_.xml (chỉ chứa ListView);

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Activity" >

        <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</RelativeLayout>

Và list_item.xml (chỉ hình ảnh và hai văn bản bắt buộc cho mỗi cổ phiếu):

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/image"
            android:layout_width="70dp"
            android:layout_height="70dp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:lineSpacingExtra="3dp"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="" />

        <TextView
            android:id="@+id/price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="" />
    </LinearLayout>

</LinearLayout>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tải com.mysql.jdbc.Driver

  2. Sự cố chuyển hướng trang Node-js

  3. MySQL:Kích thước của kiểu dữ liệu thập phân

  4. Làm thế nào tôi có thể đếm số lượng bài viết?

  5. utf8_bin so với utf_unicode_ci