我想在视图寻呼机中设置图像我成功完成但在我的应用程序视图中,寻呼机图像来自Web服务器。当图像来自Web服务器时,我如何设置图像。 Link for web service
HomeFragment.java: -
public class HomeFragment extends Fragment {
ViewPager viewPager;
CustomSwipAdapter swipAdapter;
public HomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
viewPager = (ViewPager)rootView.findViewById(R.id.viewpager);
swipAdapter = new CustomSwipAdapter(getContext());
viewPager.setAdapter(swipAdapter);
// Inflate the layout for this fragment
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}}
CustomSwipAdapter.java: -
public class CustomSwipAdapter extends PagerAdapter {
private Context ctx;
private LayoutInflater layoutInflater;
private String image_path;
private ImageView imageView;
private int[] flag;
public CustomSwipAdapter(Context ctx){
this.ctx = ctx;
}
@Override
public int getCount() {
return flag.length;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return (view==(LinearLayout)o);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View item_view = layoutInflater.inflate(R.layout.swip_layout,container,false);
imageView = (ImageView)item_view.findViewById(R.id.image_view);
new Slider().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/slider&key=test123$");
new DownloadImageTask(imageView).execute(image_path);
imageView.setImageResource(flag[position]);
container.addView(item_view);
return item_view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout)object);
// super.destroyItem(container, position, object);
}
public class Slider extends AsyncTask<String,Void,Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(String... params) {
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(params[0]);
HttpResponse response = client.execute(post);
int sattus = response.getStatusLine().getStatusCode();
if(sattus==200){
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsonObject = new JSONObject(data);
JSONArray jsonArray = jsonObject.getJSONArray("banners");
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
image_path = jsonObject1.getString("sliderimage");
flag = new int[]{1,2,3,4,5};
Log.d("Slider imaage count ayr",jsonArray.length()+"");
}
}
}catch (IOException |JSONException e){
Log.e("Error ",e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// new DownloadImageTask(imageView).execute(image_path);
}
}
public class DownloadImageTask extends AsyncTask<String,Void,Bitmap>{
ImageView bitmap;
public DownloadImageTask(ImageView bitmap){
this.bitmap = bitmap;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Bitmap doInBackground(String... params) {
String urldisplay = params[0];
Bitmap bitmap = null;
try{
InputStream in = new java.net.URL(urldisplay).openStream();
bitmap = BitmapFactory.decodeStream(in);
}catch (IOException e ){
Log.e("Error :",e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
bitmap.setImageBitmap(result);
}
}}
我是android开发新手请帮助我。
错误
FATAL EXCEPTION: main
Process: com.catalyst.android.shoppingmazza, PID: 3550
java.lang.NullPointerException: Attempt to read from null array
at com.catalyst.android.shoppingmazza.activity.CustomSwipAdapter.instantiateItem(CustomSwipAdapter.java:68)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:870)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1020)
at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1112)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:632)
at android.view.View.measure(View.java:18788)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18788)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:901)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18788)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
答案 0 :(得分:0)
您的-XX:+UseSuperWord
方法
将其更改为以下代码
doInBackground
答案 1 :(得分:0)
您可以从这里下载毕加索图书馆http://square.github.io/picasso/ 并且可以像这样使用
//Initialize ImageView
ImageView imageView = (ImageView) findViewById(R.id.imageView);
//Loading image from below url into imageView
Picasso.with(this)
.load("YOUR IMAGE URL HERE")
.into(imageView);
答案 2 :(得分:0)
这样做。在片段中初始化List并使实现如下。您不应该从适配器中获取图像,因为可能会在片段中多次调用适配器。
class SomeFragment extends Fragment {
List<Bitmap> imageList;
FetchImagesFromServerTask task;
...
...
.
.
@Override
public onCreateView(Bundle ..) {
.
.
.
imagelist = new Arraylist();
task = new FetchImagesFromServerTask();
task.execute();
}
...
...
...
public class FetchImagesFromServerTask extends AsyncTask<Void,Void,List<Bitmap>> {
@SuppressLint("LongLogTag")
@Override
protected List<Bitmap> doInBackground(Void... params) {
String buffer = "";
HttpURLConnection connection = null;
BufferedReader reader = null;
String urlString = "http://opencart.codeniques.com/shopping/?route=feed/web_api/slider&key=test123$";
try {
URL url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream inputStream = connection.getInputStream();
StringBuilder builder = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
buffer = builder.toString();
} catch (IOException e) {
Log.e("Fetching Images From Server", "Error ", e);
} finally {
if (connection != null) {
connection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
Log.e("FetchVideosTask", "Error closing stream", e);
}
}
}
List<Bitmap> images = new ArrayList<>();
try {
images = fetchImages(buffer);
} catch (IOException e) {
e.printStackTrace();
}
for(int i = 0; i < images.size(); i++ ) {
Log.d("Image fetched:",images.get(i).toString());
}
return images;
}
@Override
protected void onPostExecute(List<Bitmap> v) {
imagelist = v;
swipAdapter = new CustomSwipAdapter(getContext(),imagelist);
viewPager.setAdapter(swipAdapter);
}
public List<Bitmap> fetchImages(String urlList) throws IOException {
JSONObject myjson;
List<Bitmap> myImagesList = new ArrayList<>();
List<String> urls = new ArrayList<>();
try {
myjson = new JSONObject(urlList);
Log.d("", myjson.toString());
JSONArray page1 = myjson.getJSONArray("banners");
for (int i = 0; i < page1.length(); i++) {
JSONObject movieObject = page1.getJSONObject(i);
urls.add(movieObject.getString("sliderimage"));
}
} catch (JSONException e) {
e.printStackTrace();
}
for (String s : urls) {
byte[] stream = getByteArrayOutputStream(s);
Bitmap bitmap = BitmapFactory.decodeByteArray(stream,0,stream.length);
myImagesList.add(bitmap);
}
return myImagesList;
}
@NonNull
private byte[] getByteArrayOutputStream(String s) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
URL url = new URL(s);
InputStream is = null;
try {
is = url.openStream();
byte[] byteChunk = new byte[8092]; // Or whatever size you want to read in at a time.
int n;
while ((n = is.read(byteChunk)) > 0) {
stream.write(byteChunk, 0, n);
}
} catch (IOException e) {
System.err.printf("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage());
e.printStackTrace();
// Perform any other exception handling that's appropriate.
} finally {
if (is != null) {
Log.d("Recieved image", is.toString());
is.close();
}
}
return stream.toByteArray();
}
}
}
为您的pageradapter创建另一个构造函数,如下所示:
public class CustomSwipAdapter extends PagerAdapter {
private Context ctx;
private LayoutInflater layoutInflater;
private String image_path;
private ImageView imageView;
private int[] flag;
private List<Bitmap> imagelist; */Make sure you do this/*
public CustomSwipAdapter(Context ctx, List<Bitmap> imagelist){
this.ctx = ctx;
this.imagelist = imagelist;
}
然后在实例化方法中,只需从位图列表中设置图像资源。
imageView.setImageResource(imagelist(position));