2013-07-02 4 views
-1

я хочу вызвать startUpload(position); метод в loginbutton.setOnClickListener(new View.OnClickListener() {} так:Как объявить метод глобально в классе

loginbutton.setOnClickListener(new View.OnClickListener() { 

    @Override 
public void onClick(View v) { 
    SaveData();  
    alertDialog.dismiss(); 
    startUpload(position); 
} 

но всегда получение: позиция не может быть решена с переменной

так, где я я делаю ошибку, как я могу решить эту проблему ..?

//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 
     strSDPath = ImageList.get(position).toString(); 

     // Upload to PHP Script 
     String strUrlServer = "http://10.0.2.2/res/uploadFile.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 = "Unknow Status!"; 

    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")) 
    { 
     // When update Failed 
     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); 
    } 
} 
    } 
+3

Где объявление переменной позиции? –

ответ

0

Объявление здесь ключевое слово.

Убедитесь, что он находится в методе, который содержит этот loginButton.onClickListener код и убедитесь, что он объявлен как final

+0

проверить мой код выше и показать мне, как я могу это сделать в моем случае – Sun

+0

вы не указали достаточно кода, код, который вы показываете, просто пытается ссылаться на переменную с именем posiiton, которая нигде не объявлена. Вам нужно объяснить, откуда вы хотите получить позицию. – cowls

0

Если она может быть решена в качестве переменной, это не из-за вашего метода, это потому, что position не является атрибут.

Так, delcare как:

int position = -1; 

А затем установить его использовать метод.

+0

проверить мой код выше и показать мне, как я могу это сделать в своем случае – Sun

0

При ссылке на переменные они должны быть окончательными в рамках метода.

Так что для методов убедитесь, что он либо передан как параметр, либо он определен как глобальная переменная внутри класса.

0

TRY IT Создайте глобальную переменную POSITION, затем назначьте POSITION = position в вашем методе startUpload(), это сработает.

+0

Я думаю, что вы правы, но я несколько раз пробовал, не могли бы вы показать мне, как я должен писать его в моем коде – Sun

+0

Просто decalre POSITION переменная на глобальном scope означает внешний метод, то // Загрузка public void startUpload (конечная позиция int) {POSITION = позиция; Runnable runnable = new Runnable() { public void run() { – GOLDEE

Смежные вопросы