마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

asyncTask의 doinBackground에 문제가 있는 것 같은데 도저히모르겠어요 ㅠㅠ

0 추천

이미지와 텍스트를 같이 업로드 하려고 하는데 ㅜㅜ

네트워크 부분은 스레드 처리를 해야만 한다고 인터넷에서 봐서 ㅜㅜ

스레드를 공부해서 적용했는데요...ㅜㅜ

도저히 어떤 부분이 잘못된 것인지 모르겠습니다 ㅜㅜ

param[0], param[1] 이것들은 제목과 내용의 텍스트박스에서 추출한 텍스트들을 매개변수로 받아와요 ㅠㅠ...

protected Void doInBackground(String... param) {
        	//여기서 데이터 전송이 이루어짐. 이부분을 수정해야함.
        	 Log.d("doInBackground:"+i++, "file upload");
             try{
         		  URL url = new URL(weburl+"post01.jsp");
         		 Log.d("doInBackground:"+i++, "");
         		  URLConnection con = url.openConnection();
         		 Log.d("doInBackground:"+i++, "");
         		  con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + sp);
         		 Log.d("doInBackground:"+i++, "");
         		  con.setDoOutput(true);
         		 Log.d("doInBackground:"+i++, "");

         		  //DataOutputStream을 생성하고 이미지와 데이터파일을 여기에 담아 보낸다(바이너리 형식)
         		  DataOutputStream ds = new DataOutputStream(con.getOutputStream()); 
         		 Log.d("doInBackground:"+i++, "");
         		 
                 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);   
                 nameValuePairs.add(new BasicNameValuePair("s1", uid)); //user_id   
                 nameValuePairs.add(new BasicNameValuePair("s2", param[0]));//ptitle
                 nameValuePairs.add(new BasicNameValuePair("s3", param[1]));//pmemo
                 Log.d("doInBackground:"+i++, "");
               
               //텍스트값 
                 StringBuffer pd = new StringBuffer();
                 pd.append(sendline);
                 pd.append(nameValuePairs);
                 Log.d("doInBackground:"+i++, "");
                 //이미지 값 (name은 웹서버의 파라미터, filename은 파라미터 값이다
                 //나는 fName이 이미지파일 절대 경로에서 얻은 이미지파일이름
                 pd.append(sendline);
                 pd.append(setImage("image",fname));
                 Log.d("doInBackground:"+i++, "");
                 //텍스트, 이미지 파라미터 값 전송(한글처리를 위해 UTF-8로)
                 ds.writeUTF(pd.toString());
                 Log.d("doInBackground:"+i++, "");
                 //path는 이미지 파일 절대 경로 여기부터 파일을 1024(1KB)단위로 쪼개서
                 //웹서버(톰캣)에 업로드 시킨다
                 FileInputStream fileInputStream = new FileInputStream(filepath);
                 Log.d("doInBackground:"+i++, "");
                 int bytesAvailable = fileInputStream.available();
                 int maxBufferSize = 1024;
                 int bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 byte[] buffer = new byte[bufferSize];
                 int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                 Log.d("doInBackground:"+i++, "");
                 while (bytesRead > 0)
                 {Log.d("doInBackground:"+i++, "bytesRead="+bytesRead);
              	   DataOutputStream dataWrite = new DataOutputStream(con.getOutputStream());
              	 Log.d("doInBackground:"+i++, "");
              	   dataWrite.write(buffer, 0, bufferSize); //이미지 전송.
              	 Log.d("doInBackground:"+i++, "image write");
              	   bytesAvailable = fileInputStream.available();
              	   bufferSize = Math.min(bytesAvailable, maxBufferSize);
              	   bytesRead = fileInputStream.read(buffer, 0, bufferSize);
              	 Log.d("doInBackground:"+i++, "");
              	   }
                 fileInputStream.close();
                 Log.d("doInBackground:"+i++, "");
                 ds.writeBytes("\r\n--" + sp + "--\r\n");
                 Log.d("doInBackground:"+i++, "");
                 //이미지와 텍스트값을 전송할때와 다르게 뒤에 --가 더 붙으며 전송데이터 값의 끝
                 ds.flush(); //전송완료
             

        	  //전송을 완료하고 꼭 서버에서 전송된 결과값을 받아야 완벽하게 업로드된 텍스트
             //이미지가 저장된다. 중요하다 ..
          BufferedReader rd = null;
          rd = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
          String line = null;
          while ((line = rd.readLine()) != null) {
          Log.d("BufferedReader: ", line);
          }
             } catch (MalformedURLException e) {
            	   Log.d("MalformedURLException", e.toString());
            	   }catch(UnsupportedEncodingException ex){
            	    Log.d("UnsupportedEncodingException", ex.toString());
               	   }catch(IOException ez){
            	    Log.d("IOException", ez.toString());
               	   }
			//return null;
			return null;
         }

 

에러가 아래와 같이 납니다 ㅜㅜ

 

ccmagy (120 포인트) 님이 2014년 10월 9일 질문

1개의 답변

0 추천
zwrite의 358에서 null이 발생했다고 하네요
쎄미 (162,410 포인트) 님이 2014년 10월 9일 답변
...