2016-05-30 7 views
-1

ich möchte die Rückkehr einer Anfrage http "Ergebnis" (Methode Daten erhalten) in andere Methode, um Dateinamen mit Ergebnis im Dateinamen enthalten zu erstellen. Dank für Ihre Hilfe Ich möchte die Rückgabe einer Methode in einem anderen verwenden?

first method 
 
public void getData(){ 
 
     class GetDataJSON extends AsyncTask<String, Void, String> { 
 

 
      @Override 
 
      protected String doInBackground(String... params) { 
 
       DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
 
       HttpPost httppost = new HttpPost("http://192.168.x.x/x/id1.php"); 
 

 
       // Depends on your web service 
 

 

 
       InputStream inputStream = null; 
 
       String result = null; 
 
       try { 
 
        HttpResponse response = httpclient.execute(httppost); 
 
        HttpEntity entity = response.getEntity(); 
 

 
        inputStream = entity.getContent(); 
 
        // json is UTF-8 by default 
 
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
 
        StringBuilder sb = new StringBuilder(); 
 

 
        String line = null; 
 
        while ((line = reader.readLine()) != null) 
 
        { 
 
         sb.append(line + "\n"); 
 

 
        } 
 
        result = sb.toString(); 
 
       } catch (Exception e) { 
 
        // Oops 
 
       } 
 
       finally { 
 
        try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
 
       } 
 
       return result; 
 
      } 
 

 
      @Override 
 
      protected void onPostExecute(String result){ 
 
       myJSON =result; 
 

 
      } 
 
     } 
 
     GetDataJSON g = new GetDataJSON(); 
 
     g.execute(); 
 
    }

zweite Methode

private static File getOutputMediaFile(int type) { 
 

 
      // External sdcard location 
 
      File mediaStorageDir = new File(
 
        Environment 
 
          .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
 
        Config.IMAGE_DIRECTORY_NAME); 
 

 
      // Create the storage directory if it does not exist 
 
      if (!mediaStorageDir.exists()) { 
 
       if (!mediaStorageDir.mkdirs()) { 
 
        Log.d(TAG, "Oops! Failed create " 
 
          + Config.IMAGE_DIRECTORY_NAME + " directory"); 
 
        return null; 
 
       } 
 
      } 
 

 
      // Create a media file name 
 
      String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
 
        Locale.getDefault()).format(new Date()); 
 
      File mediaFile 
 
    //i want to use it here like "IMG_VG"+result+... 
 
      if (type == MEDIA_TYPE_IMAGE) { 
 

 
       mediaFile = new File(mediaStorageDir.getPath() + File.separator 
 
         + "IMG_VG" + timeStamp + ".jpg"); 
 
      } else if (type == MEDIA_TYPE_VIDEO) { 
 
       mediaFile = new File(mediaStorageDir.getPath() + File.separator 
 
         + "VID_VG" + timeStamp + ".mp4"); 
 
      } else { 
 
       return null; 
 
      } 
 

 
      return mediaFile; 
 
     }

+1

Mögliche Duplikat von [in Android einen Wert von AsyncTask Return] (http://stackoverflow.com/questions/9458258/return-a-value-from-asynctask-in-android) –

+0

, wie ich werde machen, dass, weil das Ergebnis mit der ersten Methode verwandt ist? Danke – develop1

Antwort

0

Warum nicht die zweite Methode innerhalb des AsyncTask mit? Anstatt die heruntergeladenen Daten zurückzugeben, geben Sie eine Datei zurück, die aus oder mit den Daten in der Methode 'doInBackground' erstellt wurde. Übergeben Sie dann die Datei an die Aktivität in 'onPostExecute'.

public void getData(){ 
    class GetDataJSON extends AsyncTask<String, Void, File> { 

     @Override 
     protected File doInBackground(String... params) { 
      DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
      HttpPost httppost = new HttpPost("http://192.168.x.x/x/id1.php"); 

      // Depends on your web service 


      InputStream inputStream = null; 
      File outputFile = getOutputMediaFile(0); 
      String result = null; 
      try { 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       //TODO check if result is 200 OK or you'll write the error in the file. 

       inputStream = entity.getContent(); 

       // json is UTF-8 by default 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
       StringBuilder sb = new StringBuilder(); 

       String line = null; 
       while ((line = reader.readLine()) != null) 
       { 
        sb.append(line + "\n"); 

       } 
       result = sb.toString(); 

       FileWriter writer = new FileWriter(outputFile); 
       writer.write(result); 
       writer.close(); 
       return outputFile; 
      } catch (Exception e) { 
       // Oops 
      } 
      finally { 
       try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
      } 
      return outputFile; 
     } 

     @Override 
     protected void onPostExecute(File result){ 
      myFile =result; 

     } 
    } 
    GetDataJSON g = new GetDataJSON(); 
    g.execute(); 
} 
+0

der Code ist sehr kompliziert, und ich nahm es von einem Tutorial ich versuchte, aber ich scheiterte :(können Sie mir bitte eine andere Lösung! Danke – develop1

+0

Eigentlich bin sehr nah zu lösen es ist normalerweise das ergebnis meiner php-datei, es ist wie das [{"id_visite": "49"}] aber ich bekomme in der name-datei nur IMG_VG [{why? – develop1

+0

Das liegt daran, dass du nichts vom Ergebnis an die übergeben wirst In der zweiten Methode wird die Datei als 'mediaFile = neue Datei (mediaStorageDir.getPath() + File.separat oder + "IMG_VG" + Zeitstempel + ".jpg"). Sie könnten einen Teil des Ergebnisses anstelle von timeStamp übergeben. – GPuschka

Verwandte Themen