2014-09-30 20 views
0

它一直是我一個問題strugling了一會兒:字符串數組從onpostexecute到mainactivity

在這一點上,我能:

1,使自定義列表視圖從我的數據庫中的數據 - 這部分已經完成。 2-使用搜索過濾器創建自定義列表視圖。

所以,我想在這一點上使用搜索過濾器進行自定義列表視圖。

的事情是,我掙扎努力,我沒有太多的時間,我已經找到了這唯一的解決辦法是:

在onPostExecute,我運行下面的代碼:

for(int i=0; i<jsonArray.length();i++){ 
      JSONObject json = null; 
      try { 
       json = jsonArray.getJSONObject(i); 

       listId.add(json.getString("id")); 
       listNome.add(json.getString("name")); 
       listTipo.add(json.getString("type")); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 



     } 

     String[] arrId = listId.toArray(new String[listId.size()]);//StringArray de ID's 
     String[] arrName = listNome.toArray(new String[listName.size()]); // 
     String[] arrType = listTipo.toArray(new String[listType.size()]); 

     tvJson.setText(Arrays.toString(arrName)); 

     Intent i = new Intent (MainActivity.this, NextActivity.class); 
     i.putExtra("KEY_ID", arrId); 
     i.putExtra("KEY_TIPO", arrTipo); 
     i.putExtra("KEY_NOME", arrNome); 
     startActivity(i); 

    } 

正如你所看到的,這不是一個完美的解決方案,但我需要這些字符串數組來製作我的自定義列表視圖。

如果我把它們放在NextActivity上,我所有的代碼都能順利運行,事情就是,我不想開始一個活動,我想讓這個數組到主活動,然後構建我的列表視圖。

那麼,有什麼辦法可以發送這3個字符串[]的MainActivity? PS:這不是最優雅的代碼,但我是新來的,我有一個項目的最後期限 - 這是我不想重寫所有代碼的主要原因。

+0

將廣播發送回您的活動並使用BroadcastReceiver接收它,或讓您的AsyncTask成爲您希望與其一起使用的Activity的子類,並調用直接傳遞字符串數組作爲參數的方法。 – zgc7009 2014-09-30 19:50:16

+0

第一次消音的任何代碼? – pihh 2014-09-30 19:53:08

+0

[看這個廣播接收器的例子](http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html) – Shaz 2014-09-30 20:08:08

回答

0

關於廣播,您需要設置您的活動以準備接收廣播。添加到您的MainActivity:

private SimpleBroadcastReceiver mReceiver; 

@Override 
public void onResume(){ 
    super.onResume(); 
    mReceiver = new SimpleBroadcastReceiver(); 
    registerReceiver(mReceiver, new IntentFilter("com.your_package.package.SOME_KEY")); 
} 

@Override 
public void onPause(){ 
    super.onPause(); 
    unregisterReceiver(mReceiver); 
} 

public class SimpleBroadcastReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Get your intent extras like you were doing in your new activity 
    } 
} 

現在您的MainActivity已準備好接收廣播,爲行動"com.your_package.package.SOME_KEY"過濾。現在你只需要從你的onPostExecute()發送廣播。但是,要做到這一點,您需要訪問應用程序上下文。要做到這一點,你可以爲您的AsyncTask類的構造函數,得到一個方面,因爲它的參數

public class MyAsyncTask extends AsyncTask<Void, Void, Void>{ 

    private Context context; 

    public MyAsyncTask(Context context){ 
     this.context = context; 
    } 
} 

現在,您可以利用此的AsyncTask從一個活動如下

new MyAsyncTask(this).execute(); 

現在你有機會你的情況下,就可以完成了onPostExecute()如下:

//in onPostExecute instead of starting your new activity 
Intent i = new Intent("com.your_package.package.SOME_KEY"); 
context.sendBroadcast(i); 

顯然,這將需要一些修改,以適應自己在做什麼,但它是根兒al想法。