2013-07-16 4 views
0

목록보기 항목의 상태를 표시하는 응용 프로그램을 작성 중입니다. 여기서는 SD 카드 이미지를 표시하고 사용자가 업로드 단추를 클릭하여 서버에 이미지를 업로드하고 결과를 표시하도록 허용합니다. 업로드가 서버에 완료되면 업로드 완료를 표시하고 사용자가 이미 서버에 업로드 한 다음 이미 업로드되었음을 표시하지만 사용자가 업로드 버튼을 클릭 할 때마다 이제 이미지의 상태를 표시하려는 경우, 목록로드, 스크린 샷 아래 참조하십시오목록보기로드 중 업데이트 단추 상태

enter image description here

UploadActivity.java :

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_uploads); 

     // Permission StrictMode 
     if (android.os.Build.VERSION.SDK_INT > 9) 
     { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     }   

     // click to create new event 
     btn_previous_activity = (Button) findViewById(R.id.btn_previous_activity); 
     btn_previous_activity.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // using Intent to call EventListActivity    
       Intent intentNewEvent = new Intent(UploadActivity.this, EventListActivity.class); 
       startActivity(intentNewEvent); 
      } 
     }); 

     /*** Get Images from SDCard ***/ 
     ImageList = getSD(); 
     Log.d(UploadActivity.LOG_TAG, "getSD() :::--- " + ImageList); 

     // ListView and imageAdapter 
     lstView = (ListView) findViewById(R.id.listView1); 
     lstView.setAdapter(new ImageAdapter(this)); 

    } 


    private List <String> getSD() 
    { 
     List <String> it = new ArrayList <String>(); 

     String string = "/mnt/sdcard/Pictures/MyNewImages/"; 
     File f = new File (string+ SingleAngelActivity.customFolder+ "/"); 

     Log.d(UploadActivity.LOG_TAG, "KEY_TITLE :::--- " + f); 
     File[] files = f.listFiles(); 
     Log.d(UploadActivity.LOG_TAG, "getListImages() :::--- " + files); 

     for (int i = 0; i <files.length; i++)   
     { 
      File file = files[i]; 
      Log.d(UploadActivity.LOG_TAG, "i<files.length() :::--- " + i); 
      Log.d("Count",file.getPath()); 
      it.add (file.getPath()); 
     } 
     Log.d(UploadActivity.LOG_TAG, "List <String> it :::--- " + it); 
     return it; 
    } 

//Upload 
    public void startUpload(final int position) {  
     Runnable runnable = new Runnable() { 

      public void run() { 
       handler.post(new Runnable() { 
        public void run() { 
         View v = lstView.getChildAt(position - lstView.getFirstVisiblePosition()); 
         // Show ProgressBar 
         ProgressBar progress = (ProgressBar)v.findViewById(R.id.progressBar); 
         progress.setVisibility(View.VISIBLE); 

         // Status 
         TextView status = (TextView)v.findViewById(R.id.ColStatus); 
         status.setText("Uploading.."); 

         new UploadFileAsync().execute(String.valueOf(position)); 
        } 
       }); 
      } 
     }; 
     new Thread(runnable).start(); 
    } 


    // Async Upload 
    public class UploadFileAsync extends AsyncTask<String, Void, Void> { 

     String resServer; 
     int position; 

     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      position = Integer.parseInt(params[0]); 

      int bytesRead, bytesAvailable, bufferSize; 
      byte[] buffer; 
      int maxBufferSize = 1 * 1024 * 1024; 
      int resCode = 0; 
      String resMessage = ""; 

      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "*****"; 

      // File Path 
      String strSDPath = ImageList.get(position).toString(); 

      // Upload to PHP Script 
      String strUrlServer = "http://10.0.2.2/res/files.php";    

      try { 
       /** Check file on SD Card ***/ 
       File file = new File(strSDPath); 
       if(!file.exists()) 
       { 
        resServer = "{\"StatusID\":\"0\",\"Error\":\"Please check path on SD Card\"}"; 
        return null; 
       } 

       FileInputStream fileInputStream = new FileInputStream(new File(strSDPath)); 

       URL url = new URL(strUrlServer); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 
       conn.setUseCaches(false); 
       conn.setRequestMethod("POST"); 

       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn.setRequestProperty("Content-Type", 
         "multipart/form-data;boundary=" + boundary); 

       DataOutputStream outputStream = new DataOutputStream(conn 
         .getOutputStream()); 
       outputStream.writeBytes(twoHyphens + boundary + lineEnd); 
       outputStream 
       .writeBytes("Content-Disposition: form-data; name=\"filUpload\";filename=\"" 
         + strSDPath + "\"" + lineEnd); 
       outputStream.writeBytes(lineEnd); 

       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       buffer = new byte[bufferSize]; 

       // Read file 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       while (bytesRead > 0) { 
        outputStream.write(buffer, 0, bufferSize); 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
       } 

       outputStream.writeBytes(lineEnd); 
       outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

       // Response Code and Message 
       resCode = conn.getResponseCode(); 
       if(resCode == HttpURLConnection.HTTP_OK) 
       { 
        InputStream is = conn.getInputStream(); 
        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

        int read = 0; 
        while ((read = is.read()) != -1) { 
         bos.write(read); 
        } 
        byte[] result = bos.toByteArray(); 
        bos.close(); 

        resMessage = new String(result); 
       } 

       Log.d("resCode=",Integer.toString(resCode)); 
       Log.d("resMessage=",resMessage.toString()); 

       fileInputStream.close(); 
       outputStream.flush(); 
       outputStream.close(); 

       resServer = resMessage.toString(); 

      } catch (Exception ex) { 
       // Exception handling 
       return null; 
      } 
      return null; 
     } 

     protected void onPostExecute(Void unused) { 
      statusWhenFinish(position,resServer); 
     }  
    } 

    // when upload finish 
    protected void statusWhenFinish(int position, String resServer) { 

     View v = lstView.getChildAt(position - lstView.getFirstVisiblePosition()); 

     // Show ProgressBar 
     ProgressBar progress = (ProgressBar)v.findViewById(R.id.progressBar); 
     progress.setVisibility(View.GONE); 


     // Status 
     TextView status = (TextView)v.findViewById(R.id.ColStatus); 
     /*** Default Value ***/ 
     String strStatusID = "0"; 
     String strMessage = "File Exists!"; 

     try {  

      JSONObject c = new JSONObject(resServer); 
      strStatusID = c.getString("StatusID"); 
      strMessage = c.getString("Message"); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     // Prepare Status  
     if(strStatusID.equals("0")) 
     {    
      status.setText(strMessage); 
      status.setTextColor(Color.RED); 

      // Enabled Button again 
      Button btnUpload = (Button) v.findViewById(R.id.btnUpload); 
      btnUpload.setText("Already Uploaded"); 
      btnUpload.setTextColor(Color.RED); 
      btnUpload.setEnabled(true); 
     } 
     else 
     { 
      status.setText("Upload Completed."); 
      status.setTextColor(Color.GREEN); 
     } 
    } 
+0

주제 해제 댓글 : 'StrictMode.setThreadPolicy (정책);'<= 내가 좋아하는 것 : – Selvin

+0

ImageAdapter의 코드를 게시 할 수 있습니까? –

답변

0

어댑터에 새 값을 추가하고 notifyDataSetChanged를 호출하십시오.

단계를 수행하여 listview를 업데이트하십시오.

1) First Add new values to your CountriesList . 
2) Before Assign EfficientAdapter to listiew, make one object of it and then assign that object. 
3) Create one function in your EfficientAdapter class called notifyDataSetChanged(). 
4) Call notifyDataSetChanged() function using EfficientAdapter object. 

EfficientAdapter objectAdapter = new EfficientAdapter(this); 
listView.setAdapter(objectAdapter); 

@Override 
public void notifyDataSetChanged() // Create this function in your adapter class 
{ 
    super.notifyDataSetChanged(); 
} 

지금 새로 고침 버튼의 onClick 이벤트에 objectAdapter.notifyDataSetChanged()를 호출합니다.