用picasso加载string变量加载不出来,换成url直接敲上去就可以,为什么?

zz670384114 2016-04-22 03:50:44
package com.example.zz670.mypic;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.squareup.picasso.Picasso;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
ImageView imageView;
LinearLayout linearLayout;
ImageView[] imageViews = new ImageView[10];
static String gURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

linearLayout = (LinearLayout) findViewById(R.id.id_gallery);

new work().start();
try {
Thread.sleep(1000);
for (int i = 0; i < imageViews.length; i++) {

imageView = new ImageView(this);
try {
// final Bitmap bitmap = getBitmap(gURL[i]);
//Log.e("ceshi","4-"+i);
//imageView.setImageBitmap(bitmap);
Log.e("ceshi","5-"+i);
Log.e("ceshi",gURL);
Picasso.with(MainActivity.this).load(gURL).into(imageView);

//就在这里,gURL字符串已经赋值为"xxxxx.jpg",但是不能加载,不报错
//但是直接把"xxxxx.jpg"敲上去就可以加载出来
//已经声明网络权限


linearLayout.addView(imageView);
} catch (Exception e) {
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}



}

private class work extends Thread {
InputStream inputStream = null;
HttpURLConnection urlConnection = null;
String response;

//Bitmap bitmap;

public void run() {
try {
//Log.e("ceshi","1");

URL url = new URL("http://gank.io/api/random/data/福利/1");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(5000);
urlConnection.setRequestMethod("GET");
int statusCode = urlConnection.getResponseCode();
if (statusCode == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
response = inputStream2String(inputStream);

}

//Log.e("ceshi","2");

if (!response.isEmpty()) {
try {
JSONObject jsonObject1 = new JSONObject(response);
// Log.e("Json", response);
JSONArray jsonArray = jsonObject1.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
//取出name
String jarray1 = jsonObject.getString("url");


gURL = jarray1;

//Log.e("Json", jarray1.toString());
Log.e("Json", gURL);
}

} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



//Log.e("ceshi","3");


}

public String inputStream2String(InputStream is) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
return buffer.toString();
}


}


}
...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingzhong128 2016-04-22
  • 打赏
  • 举报
回复
这是因为多线程导致的,picasso.load的时候请求图片地址的线程还没有获得图片地址,所以就没有给gUrl赋值,加载的时候实际加载了null地址,所以不会有图片出现。这个需求picasso需要等待work线程返回的结果,建议你用AsyncTask来请求图片数据,然后再onPostExecute里加载图片。
zz670384114 2016-04-22
  • 打赏
  • 举报
回复
没人看到吗,好桑心

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧