我在具有與圖像的應用程序,然後文本,像這樣規劃:Android的列表視圖與圖像和大約10串
在這種狀態下,我應該提到我是新來的Java和Android 。
的所有詳細信息,包括圖像的URL存儲在MySQL,PHP的檢索MySQL的記錄和顯示的Android他們完成(JSON陣列)
這裏是我的問題。 Android工作室迫使我進行異步操作以獲取來自mysql(網絡)的詳細信息,因此我必須在一個後臺函數中獲取所有細節,包括將存儲爲位圖的圖像路徑進行轉換。我所看到的唯一選擇是將列表對象從backgroundjob返回到主視圖。我需要一些幫助與清單,也許自定義適配器有一個ImageView和其他10個字符串。我迄今所做的:
PHP代碼:
<?php
$con=mysqli_connect("localhost","user","","mydb");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result=array();
$sql = "SELECT * FROM temp limit 1";
$query_exec = mysqli_query($con,$sql) or die(mysql_error());
while($row=mysqli_fetch_assoc($query_exec)) {
$row['Image']='/Images/Myimage/2/BourneIdentity.jpg';
$result[] = $row;
}
$json_result = json_encode($result);
echo $json_result;
mysqli_close($con);
?>
請注意:我已經硬編碼的測試圖像的位置,我會得到的文件夾中的所有圖像,像這樣:
if ($result = mysqli_query($con, $sql))
{
while($row = $result->fetch_object())
{
echo '<br>';
$tempArray = $row;
$dh = opendir('c:/wamp/www/'.$row->pic_dir);
while (false !== ($filename = readdir($dh))) {
if ($filename !="." and $filename != "..") {
echo '<img src="' .$row->pic_dir.$filename.'" width="40" height="40"/>' ;
}
}
echo '<a href="'.'test.php'.'">' . $row->description .'</a>';
}
}
的Android - MainActivity.java(這不是接近完成任何地方,只是不知道如何從這裏走具有包含不同的對象列表/數組)
package com.example.rgopalkr.readdb;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
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 java.lang.String;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
class TestAsync extends AsyncTask<Void, Integer, Bitmap>
{
protected void onPreExecute(){
TextView tv = (TextView) findViewById(R.id.textv);
tv.setText("Get Discription from database");
}
protected Bitmap doInBackground(Void...arg0) {
StringBuilder str= new StringBuilder();
Bitmap bmp = null;
try {
URL url = new URL("http://10.0.2.2/shareit/php/test_json.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
InputStreamReader isw = new InputStreamReader(in);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = br.readLine()) != null) {
str.append(line);
}
str.append(conn.getResponseCode());
conn.disconnect();
} catch (IOException M) {M.printStackTrace();}
try {
JSONArray jArray = new JSONArray(str.toString());
StringBuilder sb = new StringBuilder();
String imagePath="http://10.0.2.2/shareit/";
for (int i=0; i < jArray.length(); i++)
{
try {
JSONObject oneObject = jArray.getJSONObject(i);
imagePath += oneObject.getString("Image");
URL bmpurl = new URL(imagePath);
bmp = BitmapFactory.decodeStream(bmpurl.openConnection().getInputStream());
// iv.setImageBitmap(bmp);
sb.append(imagePath + ',');
} catch (JSONException | IOException e) {e.printStackTrace();}
}
// tv.setText(sb.toString());
} catch (JSONException JE) {JE.printStackTrace();}
return bmp;
}
protected void onProgressUpdate(Integer...a){
}
protected void onPostExecute(Bitmap result) {
TextView tv = (TextView) findViewById(R.id.textv);
ImageView iv = (ImageView) findViewById(R.id.imageView);
iv.setImageBitmap(result);
}
}
public void loadItems(View v){
Button button = (Button) findViewById(R.id.tButton);
TextView tv = (TextView) findViewById(R.id.textv);
new TestAsync().execute();
}
public void Messagebox(int msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
}
活動主要的XML代碼,我想我知道我在XML文件中爲列表視圖所做的更改,我當時玩的是不同的視圖。
<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<Button
android:id="@+id/tButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Press to Load"
android:onClick="loadItems"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/textv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="false"
android:text="This is where the text will come"
android:layout_centerVertical="@+id/imageView"
android:layout_centerHorizontal="true" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/lending"
android:id="@+id/imageView" />
</RelativeLayout>
如何,現在的仿真器看起來(新手,對不起着嵌入圖像的是,必須得到10個代表嵌入圖片)
How my current emulator screen looks like
我讀的文章在這裏,這給了我一些想法:http:// w androidwive info/2012/02/android-custom-listview -with-image-and-text /,但看起來很複雜。如果任何人都可以幫助我使用多個對象類型列表,並給出一些指示如何前進,那將是非常棒的!
此外,第一個屏幕只會顯示帶有說明的縮略圖,當按下該屏幕時,應該顯示爲該記錄存儲的所有圖像。
我處於與您類似的位置。如果您的問題涉及列表視圖,您是否嘗試過自定義數組適配器? http://stackoverflow.com/questions/6793999/android-listview-with-2-textviews-per-item –
@ScriptKitty ListView是舊的方式。 RecyclerView是創建列表的新方法。我用這個文檔來創建一個RecyclerView https://developer.android.com/training/material/lists-cards.html – GKproggy
@GKproggy,RecyclerView據我所知是你如何顯示數據加載後,我的問題是更多如何加載數據,但感謝您的建議。當我有所有的數據顯示 – GreenThumb