2012-02-26 2 views
0

私は初心者です。リストをクリックして、データ "リンク"をアクティビティ "DownloadFile.java"に送信する必要があります。アクティビティ "DownloadFile.java"以前のアクティビティとのリンクの "String fileURL ="データでデータを置き換える必要があります。どうもありがとうございました。Androidでリストアクティビティとダウンロードアクティビティの間でデータをやりとりするには

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); 

     } 
    }); 
} 

DownloadFileアクティビティ

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; 
    } 
} 
+0

http://stackoverflow.com/questions/1073114/android-how-to-pass-the-data-to-sub -activitiesこの "id" = positionを試してください – Nitin

答えて

0

正しい方法は、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

質問があります。オリジナルの "String fileURL"を削除しますか? THX – vanhalf

+0

ここに完全に当てはまるかどうかは分かりませんが、文字列fileUrl = "httpを初期化することはできますか? ://%s.jpg "と入力し、インテントデータからファイル名の値を取得すると、これを行います - Url url = new Url(String.format(fileUrl、actualFileName)); – Anirudh

+0

送信データはうまくいきます。 "URL u =新しいURL(リンク)"の "URL u =新しいURL(fileURL)"に置き換えられます。 "リンクを変数に解決できません"というエラーを書き込みます。 – vanhalf

0

あなたは活動の間にパラメータを渡すために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", ""); 
+0

共有設定は永続的で遅いですが、これは短命のデータを渡すことに非常に悪い方法です。 – straya

0

StartActivityForResult。 新しいアクティビティが終了すると、結果が返されます。

関連する問題