Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak analizować JSON obrazy z mysql i wypełniać listę?

Jeśli Twoim problemem jest to, że dane, które chcesz wyświetlić jako http://www.spinner.bl.ee/images/ATE.png wychodzi jako http:\/\/spinner.bl.ee\/images\/ATE.png , to nie powinno stanowić problemu dla org.json.JSONObject kiedy ładuje ciąg z twojego adresu URL do JSONObject; czy przetestowałeś ten kod?

Oto implementacja niektórych AsyncTasks uzyskujących dostęp do twojego serwera; istnieje tylko jedna aktywność, MainActivity.java, a następnie StockInformation.java jako obiekt.

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

    }
}

Zdefiniowane osobno:StockInformation.java; podstawowy obiekt.

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

A potem pliki xml:activity_.xml (zawiera tylko 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>

I list_item.xml (tylko obraz i dwa teksty wymagane dla każdego zapasu):

<?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. Połącz MySQL przez localhost nie działa, ale 127.0.0.1 działa

  2. Jak utworzyć księgę główną/konto T za pomocą PHP Mysql

  3. Jak wyświetlić sortowanie serwerów w MySQL?

  4. Aktualizacja bazy danych MySql przy użyciu PHP za pomocą funkcji javascript onClick

  5. Jak obsłużyć duży ruch MySQL?