Как передать данные между действиями списка и действиями загрузки в Android - PullRequest
0 голосов
/ 26 февраля 2012

Я новичок. Мне нужен элемент, нажав на список, чтобы отправить данные "ссылку" на действия "DownloadFile.java". Упражнение «DownloadFile.java» Мне нужно заменить данные на «String fileURL =» data для «ссылки» с предыдущими действиями. Большое спасибо.

acivity1

public class Mangalist extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholdermanga);

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


    String xml = XMLmanga.getXML();
    Document doc = XMLmanga.XMLfromString(xml);

    int numResults = XMLmanga.numResults(doc);

    if((numResults <= 0)){
        Toast.makeText(Mangalist.this, "Geen resultaten gevonden", Toast.LENGTH_LONG).show();  
        finish();
    }

    NodeList nodes = doc.getElementsByTagName("result");

    for (int i = 0; i < nodes.getLength(); i++) {                           
        HashMap<String, String> map = new HashMap<String, String>();    

        Element e = (Element)nodes.item(i);
        map.put("id", XMLmanga.getValue(e, "id"));
        map.put("name", "Kapitola:" + XMLmanga.getValue(e, "name"));
        map.put("volume", "Volume: " + XMLmanga.getValue(e, "volume"));
        map.put("link", XMLmanga.getValue(e, "link"));
        mylist.add(map);            
    }       

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.mangalist, 
                    new String[] { "name", "volume" }, 
                    new int[] { R.id.item_title, R.id.item_subtitle });

    setListAdapter(adapter);

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);  
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            @SuppressWarnings("unchecked")
            HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
            Toast.makeText(Mangalist.this, "Kapitola '" + o.get("id") + "'", Toast.LENGTH_LONG).show(); 
            Intent i = new Intent(Mangalist.this,DownloadFile.class);
            startActivity(i);

        }
    });
}

Скачать файл активности

public class DownloadFile extends Activity {
public static final String LOG_TAG = "Android Downloader";

//initialize our progress dialog/bar
private ProgressDialog mProgressDialog;
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;

//initialize root directory
File rootDir = Environment.getExternalStorageDirectory();

//defining file name and url
public String fileName = "xx.jpg";
public String fileURL = "https://xx.JPG";

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    //setting some display
    setContentView(R.layout.main);
    TextView tv = new TextView(this);
    tv.setText("Android Download File With Progress Bar");

    //making sure the download directory exists
    checkAndCreateDirectory("/my_downloads");

    //executing the asynctask
    new DownloadFileAsync().execute(fileURL);
}

//this is our download file asynctask
class DownloadFileAsync extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }


    @Override
    protected String doInBackground(String... aurl) {

        try {
            //connecting to url
            URL u = new URL(fileURL);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            //lenghtOfFile is used for calculating download progress
            int lenghtOfFile = c.getContentLength();

            //this is where the file will be seen after the download
            FileOutputStream f = new FileOutputStream(new File(rootDir + "/my_downloads/", fileName));
            //file input is from the url
            InputStream in = c.getInputStream();

            //here's the download code
            byte[] buffer = new byte[1024];
            int len1 = 0;
            long total = 0;

            while ((len1 = in.read(buffer)) > 0) {
                total += len1; //total = total + len1
                publishProgress("" + (int)((total*100)/lenghtOfFile));
                f.write(buffer, 0, len1);
            }
            f.close();

        } catch (Exception e) {
            Log.d(LOG_TAG, e.getMessage());
        }

        return null;
    }

    protected void onProgressUpdate(String... progress) {
         Log.d(LOG_TAG,progress[0]);
         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String unused) {
        //dismiss the dialog after the file was downloaded
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
}

//function to verify if directory exists
public void checkAndCreateDirectory(String dirName){
    File new_dir = new File( rootDir + dirName );
    if( !new_dir.exists() ){
        new_dir.mkdirs();
    }
}

//our progress bar settings
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading file...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.setMax(100);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(true);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
    }
}

Ответы [ 3 ]

0 голосов
/ 26 февраля 2012

StartActivityForResult.После завершения нового действия оно отправит вам результаты.

0 голосов
/ 26 февраля 2012

Правильный подход - передать данные в Intent, которые вы используете для запуска действия DownloadFile.В OnItemClickListener

Intent i = new Intent(Mangalist.this,DownloadFile.class);
i.putExtra("link", link /* link from your list item*/ );
startActivity(i); //or startActivityForResult() if you want to come back to this activity

и в вашей активности DownloadFile onCreate ()

Intent intent = getintent()
String link = intent.getStringExtra("link");
0 голосов
/ 26 февраля 2012

Вы можете попытаться использовать SharedPreferences для передачи параметров между действиями.

app_preferences = PreferenceManager.getDefaultSharedPreferences(this);        
SharedPreferences.Editor editor = app_preferences.edit();
editor.putString("fileURL", "actualURL");
editor.commit();

Другие действия могут читать его следующим образом:

SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(yourActivity.this);
    String fileName = app_preferences.getString("fileURL", "");
...