2016-03-08 44 views
2

这是我的java代码。我一直没有得到我的android工作室的网址价值。我打算从wamp服务器的sql数据库中获取图像。我一直在收到错误“没有价值的网址”

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener{ 
private String imagesJSON; 

private static final String JSON_ARRAY ="result"; 
private static final String IMAGE_URL = "url"; 

private JSONArray arrayImages= null; 

private int TRACK = 0; 

private static final String IMAGES_URL = 
"http://192.168.43.214/apexStore2/image.php"; 

private Button buttonFetchImages; 
private Button buttonMoveNext; 
private Button buttonMovePrevious; 
private ImageView imageView; 


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

    imageView = (ImageView) findViewById(R.id.imageView); 
    buttonFetchImages = (Button) findViewById(R.id.buttonFetchImages); 
    buttonMoveNext = (Button) findViewById(R.id.buttonNext); 
    buttonMovePrevious = (Button) findViewById(R.id.buttonPrev); 
    buttonFetchImages.setOnClickListener(this); 
    buttonMoveNext.setOnClickListener(this); 
    buttonMovePrevious.setOnClickListener(this); 
} 


private void extractJSON(){ 
    try { 

     JSONObject jsonObject = new JSONObject(imagesJSON); 
     arrayImages = jsonObject.getJSONArray(JSON_ARRAY); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

private void showImage(){ 
    try { 
     JSONObject jsonObject = arrayImages.getJSONObject(TRACK); 
     getImage(jsonObject.getString(IMAGE_URL)); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

private void moveNext(){ 
    if(TRACK < arrayImages.length()){ 
     TRACK++; 
     showImage(); 
    } 
} 

private void movePrevious(){ 
    if(TRACK>0){ 
     TRACK--; 
     showImage(); 
    } 
} 



private void getAllImages() { 
    class GetAllImages extends AsyncTask<String,Void,String>{ 
     ProgressDialog loading; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loading = ProgressDialog.show(MainActivity.this, "Fetching 
Data...","Please Wait...",true,true); 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      loading.dismiss(); 
      imagesJSON = s; 
      extractJSON(); 
      showImage(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      String uri = params[0]; 
      BufferedReader bufferedReader = null; 
      try { 
       URL url = new URL(uri); 
       HttpURLConnection con = (HttpURLConnection) 
url.openConnection(); 
       con.setRequestProperty("Content-Type", 
"application/json;charset=utf-8"); 
       con.setRequestProperty("X-Requested-With", 
"XMLHttpRequest"); 
       StringBuilder sb = new StringBuilder(); 

       bufferedReader = new BufferedReader(new 
InputStreamReader(con.getInputStream())); 

       String json; 
       while((json = bufferedReader.readLine())!= null){ 
        sb.append(json+"\n"); 
       } 

       return sb.toString().trim(); 

      }catch(Exception e){ 
       return null; 
      } 
     } 
    } 
    GetAllImages gai = new GetAllImages(); 
    gai.execute(IMAGES_URL); 
} 

private void getImage(String urlToImage){ 
    class GetImage extends AsyncTask<String,Void,Bitmap>{ 
     ProgressDialog loading; 
     @Override 
     protected Bitmap doInBackground(String... params) { 
      URL url = null; 
      Bitmap image = null; 

      String urlToImage = params[4]; 
      try { 
       url = new URL(urlToImage); 
       image = 
    BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return image; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loading = ProgressDialog.show(MainActivity.this,"Downloading 
    Image...","Please wait...",true,true); 
     } 

     @Override 
     protected void onPostExecute(Bitmap bitmap) { 
      super.onPostExecute(bitmap); 
      loading.dismiss(); 
      imageView.setImageBitmap(bitmap); 
     } 
    } 
    GetImage gi = new GetImage(); 
    gi.execute(urlToImage); 
} 

@Override 
public void onClick(View v) { 
    if(v == buttonFetchImages) { 
     getAllImages(); 
    } 
    if(v == buttonMoveNext){ 
     moveNext(); 
    } 
    if(v== buttonMovePrevious){ 
     movePrevious(); 
    } 
} 

这是我的php代码。当我运行我的PHP代码中,我得到了以下的输出:

{ 
"result": [{ 
    "product_img1": "product-131.jpg" 
}, { 
    "product_img1": "product-124.jpg" 
}, { 
    "product_img1": "product-118.jpg" 
}, { 
    "product_img1": "product-126.jpg" 
}, { 
    "product_img1": "USM_New_Logo1.jpg" 
}, { 
    "product_img1": "UI.PNG" 
}, { 
    "product_img1": "cat402.PNG" 
}, { 
    "product_img1": "launcher.png" 
}] 
} 

我的PHP代码得到了来自SQL数据库中获取的图像,但是,我的Android工作室无法获取它。有没有解决办法?

<?php 
include ('classes/functions.php'); 

$check_product = "SELECT * FROM products WHERE cat_id = '0';"; 
     $run_product_checking = mysqli_query($con, $check_product); 
     $result = array(); 
    while($row = mysqli_fetch_array($run_product_checking)){ 
    array_push($result, 
    array('product_img1'=>$row[4] 

)); 
} 

    echo json_encode(array("result"=>$result)); 
?> 

回答

0

根据您的的AsyncTask类,要传递URL作为第一个参数,

class GetImage extends AsyncTask<String,Void,Bitmap>{ 
    ..... 
    } 

但在这里,你收到它作为第4'参数,

String urlToImage = params[4]; 

要解决此问题,只需将参数值从4更换为0,

String urlToImage = params[0]; 

PS:确保JSON字符串“IMAGE_URL”不返回空值,

getImage(jsonObject.getString(IMAGE_URL)); 
+0

为了避免JSON越来越空值,你可以使用jsonObject.optString(IMAGE_URL),这将处理您的空指针 – Zohair

+0

不能改变PARAMS [4]原因会给出java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 4错误。 –

+0

顺便说一句,我得到了错误SkImageDecoder :: Factory返回null。如何更改代码? –

相关问题