what i am trying to do is the following
IntentService
in the backgroundReceiver
classmy code so far is as follow :
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
if(IsRepository){
view = vi.inflate(R.layout.filerepositorylayout, null);
}
}
BindLayoutElemnts(view, position);
return view;
}
Here is where The Intent service is being called :
private void BindLayoutElemnts(View view, int position) {
myFiles = (files) getItem(position);
img_Download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(),DownloadService.class);
intent.putExtra("FileID",""+myFiles.getID());
intent.putExtra("FileName",myFiles.getName());
context.startService(intent);
}
});
}
The calling activity
Here is where the Receiver
is being called
public class user_repositry extends AppCompatActivity implements DownloadReceiver.Receiver {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myDownloadReceiver = new DownloadReceiver(new Handler());
myDownloadReceiver.setReceiver(this);
}
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
Toast.makeText(user_repositry.this, "Downloaded", Toast.LENGTH_SHORT).show();
}
The Intent service
code :
ResultReceiver rec;
@Override
protected void onHandleIntent(Intent intent) {
rec = intent.getParcelableExtra("DownloadReceiver");
}
private void UpdateDBRecord() {
HashMap<String, String> PostData=new HashMap<String, String>();
PostData.put("call","UpdateFile");
PostData.put("ID", ""+file_ID);
BackgroundWorker registerWorker= new BackgroundWorker(this,this,PostData);
registerWorker.setShowLoadingMessage(false);
registerWorker.execute(Helper.getPhpHelperUrl());
}
this function is the function called in Post execute
from the registerWorker
above
@Override
public void processFinish(String results) {
Log.d("Download","Download DB updated");
Bundle bundle = new Bundle();
//bundle.putString("resultValue", "My Result Value. Passed in: " );
// Here we call send passing a resultCode and the bundle of extras
rec.send(Activity.RESULT_OK, bundle);
}
I am stuck with this error now :
Failed resolution of: Lcom/bassem/donateme/classes/DownloadReceiver;
I understood that the receiver is not being initiated but i can't seem to find the missing code in my logic
Appreciate your help
Try this,
Step 1: Create the result handler using ResultReceiver inside activity
public ResultReceiver downloadReceiver = new ResultReceiver(new Handler()) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
//Broadcast /send the result code in intent service based on your logic(success/error) handle with switch
switch (resultCode) {
case 1: {
//Get the resultData and do your logic here
//Update your list view item here
break;
}
case 2: {
//Get the resultData and do your logic here
//Update your list view item here
break;
}
}
}
};
Step 2: Put the result handler inside the intent and start the intent service
Intent intent = new Intent(getContext(), DownloadService.class);
intent.putExtra("receiver",downloadReceiver);
Step 3: Handle the intent in service class(get the value of result handler)
final ResultReceiver receiver;
@Override
protected void onHandleIntent(Intent intent) {
receiver = intent.getParcelableExtra("receiver");
}
Step 4: Send/Broadcast the data to the result handler
//based on your logic, change the result code and data
//Add your result data (success scenario)
Bundle bundle = new Bundle();
bundle.putString("result","Some text");
receiver.send(1,bundle);
//Add your result data (failure scenario)
receiver.send(0,bundle);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With