Android 스트링 이미지 디코딩 관련
조회수 546회
스프링 서버에서 이미지를 encodeBase64String으로 string으로 변환해준 다음 JSON으로 key value값으로 안드로이드로 넘겨줍니다. 그런데 안드로이드에서 이미지에서만 자꾸 오류가 뜨네요 코드입니다.
MainActivity.java
class BackgroundTask extends AsyncTask { String target;
@Override
protected void onPreExecute()
{
target="아이피";
}
@Override
protected String doInBackground(Void... voids)
{
try
{
URL url=new URL(target);
HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();
InputStream inputStream=httpURLConnection.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
String temp;
StringBuilder stringBuilder=new StringBuilder();
while((temp=bufferedReader.readLine())!=null)
{
stringBuilder.append(temp+"\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
Log.d("message",stringBuilder.toString().trim());
return stringBuilder.toString().trim();
}catch (Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
public void onProgressUpdate(Void... values)
{
super.onProgressUpdate(values);
}
public void onPostExecute(String result)
{
try{
JSONObject jsonObject=new JSONObject(result);
JSONArray jsonArray=jsonObject.getJSONArray("response");
int count=0;
String postUserid,postTitle,postContents,postDate;
while(count<jsonArray.length()){
JSONObject object=jsonArray.getJSONObject(count);
postUserid=object.getString("creatorId");
postTitle=object.getString("title");
postContents=object.getString("contents");
postDate=object.getString("image");
adapter.addItem(new Person(postUserid,postTitle,postContents,postDate));
count++;
}
}catch (Exception e){
}
}
}
위에서 image값으로 String으로 받아줍니다. 그리고 Person객체파라미터로 집어 넣고
Person.java
public class Person {
String userId; String title; String contents; String image;
public Person(String userId, String title, String contents, String image) {
this.userId = userId;
this.title = title;
this.contents = contents;
this.image=image;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
adapter에 넣어줘 메인화면에 띄워줄려고 합니다. adapter부분에서 String image를 디코딩 하는 부분입니다.
PersonAdapter.java 의 setItem부분(BindViewHolder)
public void setItem(Person item){ String data=item.getImage(); Log.d("image",item.getImage()); byte[] byteArray= Base64.decode(data,0);
ByteArrayInputStream inputStream=new ByteArrayInputStream(byteArray);
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
uploadImage.setImageBitmap(bitmap); //에러나는부분
userId.setText(item.getUserId());
title.setText(item.getTitle());
contents.setText(item.getContents());
}
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.jungbo.j4android.mynewist, PID: 5549 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference at com.jungbo.j4android.mynewist.PersonAdapter$ViewHolder.setItem(PersonAdapter.java:112) at com.jungbo.j4android.mynewist.PersonAdapter.onBindViewHolder(PersonAdapter.java:40) at com.jungbo.j4android.mynewist.PersonAdapter.onBindViewHolder(PersonAdapter.java:22) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:557) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924) at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3336) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535) at android.widget.LinearLayout.measureVertical(LinearLayout.java:825) at android.widget.LinearLayout.onMeasure(LinearLayout.java:704) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:733) at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:95) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1556) at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:803) at android.view.View.measure(View.java:23169) at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1119) at android.view.View.measure(View.java:23169) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535) at android.widget.LinearLayout.measureVertical(LinearLayout.java:825) at android.widget.LinearLayout.onMeasure(LinearLayout.java:704) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) E/AndroidRuntime: at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535) at android.widget.LinearLayout.measureVertical(LinearLayout.java:825) at android.widget.LinearLayout.onMeasure(LinearLayout.java:704) at android.view.View.measure(View.java:23169) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6749) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:716) at android.view.View.measure(View.java:23169) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2718) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1572) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1855) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) at android.view.Choreographer.doCallbacks(Choreographer.java:761) at android.view.Choreographer.doFrame(Choreographer.java:696) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
댓글 입력