마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Activity에 있는 arraylist값을 OnReceive 할때 가져오고 싶은데 어떻게 해야하나요?

0 추천

IncomingCallBroadcastReceiver.java

 

public class IncomingCallBroadcastReceiver extends BroadcastReceiver {
    public static final String TAG = "PHONE STATE";
    private static String mLastState;
 
    private final Handler mHandler = new Handler(Looper.getMainLooper());
 
    @Override
    public void onReceive(final Context context, Intent intent) {
        Log.d(TAG,"onReceive()");
 
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if (state.equals(mLastState)) {
            return;
        } else {
            mLastState = state;
        }
    }
}


MainActivity​.java

 

public class MainActivity extends Activity {
    String myJSON;
 
    private static final String TAG_RESULTS="result";
 
    private static final String TAG_SUPPLIER_NAME = "supplier_name";
    private static final String TAG_SUPPLIER_LOCAL_NAME ="supplier_local_name";
 
    JSONArray peoples = null;
 
    public ArrayList<SupplierInfo> arraylist = new ArrayList<SupplierInfo>();
 
    ListView list;
    EditText filterText;
    ListViewAdapter adapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        filterText = (EditText)findViewById(R.id.search);
        list = (ListView) findViewById(R.id.listView);
        getDbData("http://test.php");
        // IP주소 : PHP 파일이 등록된 서버의 IP 주소 및 경로
 
        list.setTextFilterEnabled(true);
        filterText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
                //변화되는 문자열을 필터링에 적용한다
                //list.setFilterText(s.toString());
                String text = filterText.getText().toString().toLowerCase(Locale.getDefault());
                adapter.filter(text);
            }
 
            @Override
            public void afterTextChanged(Editable arg0) {
            }
 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }
        });
    }
    private void getDbData(String string) {
        class GetDataJSON extends AsyncTask<String, Void, String>{
 
            @Override
            protected String doInBackground(String... params) {
 
                String uri = params[0];
                BufferedReader bufferedReader = null;
 
                try {
                    URL url = new URL(uri);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    StringBuilder sb = new StringBuilder();
 
                    bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "EUC-KR"));
 
                    String json;
                    while((json = bufferedReader.readLine())!= null){
                        sb.append(json + "\n");
                    }
                    return sb.toString().trim();
 
                } catch(Exception e){
                    return new String("Exception: " + e.getMessage());
                }
 
            }
 
            protected void onPostExecute(String result){
                myJSON=result;
                showList();
            }
        }
 
        GetDataJSON g = new GetDataJSON();
        g.execute(string);
 
    }
 
    protected void showList(){
        //Boolean bCheck;
        try {
            JSONObject jsonObj = new JSONObject(myJSON);
            peoples = jsonObj.getJSONArray(TAG_RESULTS);
 
            for(int i=0;i<peoples.length();i++){
                JSONObject c = peoples.getJSONObject(i);
                String supplierName = c.getString(TAG_SUPPLIER_NAME);
                String supplierLocalName = c.getString(TAG_SUPPLIER_LOCAL_NAME);
 
                SupplierInfo sp = new SupplierInfo(supplierName, supplierLocalName);
                arraylist.add(sp);
            }
 
            adapter = new ListViewAdapter(this, arraylist);
 
            list.setAdapter(adapter); // ListView 에 어댑터 설정
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
 
}
파이르 (120 포인트) 님이 2017년 4월 5일 질문
파이르님이 2017년 4월 5일 수정
1. sqlite나 realm 에 저장해서 부른다
2. 서버통신을한다

2개의 답변

0 추천
추천하는 방법은 아니지만 ArrayList를 static으로 설정하시고, Activity.arraylist값 가져와서 쓰시면됨.

자바는 가비지컬렉션때문에 메모리차면 지가 알아서 초기화하는 문제가 발생할 수도 있어서 추천해드리는건 아님 ㅎ
뼈발자 님이 2017년 4월 5일 답변
해결하였습니다. 감사합니다.
0 추천
브로드캐스트 데이터를 JSONString 으로 변환해서 던지시면 됩니다.
개발자초심 (21,220 포인트) 님이 2017년 4월 5일 답변
...