Android Studio get a txt file from web in widget - java

I am new to android studio and just want an app to do one thing: check if the bytewerk is open (domain is stats.bytewerk.org/status.txt just one word either open or closed) and display it on a widget. But I tried all kind of httpconections like volley or okhttp, but never got a result. I already added the uses permission in the manifest.
1:
public class StatusWidget<appWidgetId> extends AppWidgetProvider {
#RequiresApi(api = Build.VERSION_CODES.KITKAT)
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) throws IOException {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.status_widget);
new GetNotePadFileFromServer().execute();
//views.setViewVisibility(R.id.bytewerk_online, 0);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
#RequiresApi(api = Build.VERSION_CODES.KITKAT)
#Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
try {
updateAppWidget(context, appWidgetManager, appWidgetId);
} catch (IOException e) {
e.printStackTrace();
}
}
}
#Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
#Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
}public class GetNotePadFileFromServer extends AsyncTask<Void, Void, Void> {
String TextHolder;
protected Void doInBackground(Void... params) {
try {
URL url = new URL("http://stats.bytewerk.org/status.txt");
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(url.openStream()));
TextHolder = "";
String TextHolder2 = "";
while ((TextHolder2 = bufferReader.readLine()) != null) {
TextHolder += TextHolder2;
}
bufferReader.close();
} catch (MalformedURLException malformedURLException) {
// TODO Auto-generated catch block
malformedURLException.printStackTrace();
TextHolder = malformedURLException.toString();
} catch (IOException iOException) {
// TODO Auto-generated catch block
iOException.printStackTrace();
TextHolder = iOException.toString();
}
return null;
}
#Override
protected void onPostExecute(Void finalTextHolder) {
textView.setText(TextHolder);
super.onPostExecute(finalTextHolder);
}
2:
final TextView textView = (TextView) findViewById(R.id.text);
// ...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
#Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
textView.setText("Response is: "+ response.substring(0,500));
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
textView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
And the other examples on the offical website
of course i already implemented
dependencies {
...
implementation 'com.android.volley:volley:1.1.1'
}

Add internet permission to your Manifest.xml and volley works, This line:
<uses-permission android:name="android.permission.INTERNET" />
before application tag.
Hope this helps.

this was my solution:
static void updateAppWidget(Context context, final AppWidgetManager appWidgetManager,
final int appWidgetId) {
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.status_widget);
// ...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(context);
String url ="http://stats.bytewerk.org/status.txt";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
public void onResponse(String response) {
// Display the first 500 characters of the response string.
if (response.equals("open")) {
views.setViewVisibility(R.id.status_online, 1);
} else {
views.setViewVisibility(R.id.status_offline, 1);
}
//views.setTextViewText(R.id.text, "Yeah!" + response);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
views.setViewVisibility(R.id.status_nointernet, 1);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
});
queue.add(stringRequest);

Related

Android App Widget - AsyncTask API call in update

I want to make a simple widget on my Android Homescreen where I am able to fill in my postalcode or city, and by submitting that data, I would like to be able to update the Widget with data from an API call to Openweathermap.org.
I've made every step to make it work, but for some reason the Widget textView won't update with the data collected.
This is my main activity.
public class WeerManWidget extends AppWidgetProvider {
public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
CharSequence widgetText = WeerManWidgetConfigureActivity.loadTitlePref(context, appWidgetId);
// Construct the RemoteViews object
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.weer_man_widget);
views.setTextViewText(R.id.appwidget_text, widgetText);
Intent configIntent = new Intent(context, WeerManWidgetConfigureActivity.class);
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, appWidgetId, configIntent, 0);
views.setOnClickPendingIntent(R.id.btnSettings, configPendingIntent);
configIntent.setAction(ACTION_WIDGET_CONFIGURE + Integer.toString(appWidgetId));
new GetWeatherTask(views).execute(widgetText.toString());
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
#Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
#Override
public void onDeleted(Context context, int[] appWidgetIds) {
// When the user deletes the widget, delete the preference associated with it.
for (int appWidgetId : appWidgetIds) {
WeerManWidgetConfigureActivity.deleteTitlePref(context, appWidgetId);
}
}
#Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
#Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
}
And this is the class that I use for the API call.
public class GetWeatherTask extends AsyncTask<String, String, String> {
private RemoteViews views;
GetWeatherTask(RemoteViews views) {
this.views = views;
}
#Override
public String doInBackground(String... params) {
String postalCode = params[0];
HttpURLConnection urlConnection = null;
URL url = null;
JSONObject object = null;
JSONArray myArray = null;
InputStream inStream = null;
try {
url = new URL("http://api.openweathermap.org/data/2.5/weather?q="+postalCode+",nl&appid=XXXXX&units=metric");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.connect();
inStream = urlConnection.getInputStream();
BufferedReader bReader = new BufferedReader(new InputStreamReader(inStream));
String temp, response = "";
while ((temp = bReader.readLine()) != null) {
response += temp;
}
object = (JSONObject) new JSONTokener(response).nextValue();
JSONObject obj = object.getJSONObject("main");
String weatherTemp = obj.getString("temp");
double weatherFloat = Double.parseDouble(weatherTemp);
//weatherFloat = (weatherFloat - 273.15);
String newTemp = String.valueOf(weatherFloat);
return newTemp;
} catch (Exception e) {
return e.toString();
} finally {
if (inStream != null) {
try {
inStream.close();
} catch (IOException ignored) {
}
}
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
#Override
public void onPostExecute(String result) {
Log.v("WeerManWidget", result);
views.setTextViewText(R.id.appwidget_text, result);
}
}
Seen in the onPostExecute in the AsyncTask, I log the results. This has the correct data. So everthing comes along nicely, but when I want to update the view with the setTextViewText, nothing happens. I am new to Android development, and am out of ideas.
Anyone care to enlighten me?
After you called the API and used:
views.setTextViewText(R.id.appwidget_text, result);
You need to use the AppWidgetManager to update the UI.
Here is an example:
AppWidgetManager manager=AppWidgetManager.getInstance(context);
manager.updateAppWidget(widgetID,views);
private void updateViewHere(String parseResult){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
int[] ids = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, WidgetProvider.class));
views.setTextViewText(R.id.text, parseResult);
AppWidgetManager manager=AppWidgetManager.getInstance(context);
manager.updateAppWidget(ids,views);
}
Using this approach we can update widget views.

android update custom view in asynctask

Ok, I have a custom view which plays gifs from the internet. Therefor I need to add an url to my view to download the gif. But I can't seem to update my custom view inside my asynctask. I need to add an url string to my custom view gifView.setUrl(). It works in the onCreate Class but it gives me null in asynctask.
Oncreate class
GifView gifView;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
id = extras.getInt("id");
String idStr = String.valueOf(id);
String extension = extras.getString("extension");
if(extension.equals(".gif")){
setContentView(R.layout.activity_post_gif);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
gifView = (GifView)findViewById(R.id.gifview);
titleStr = (TextView)findViewById(R.id.titleTXT);
postInfo = (TextView)findViewById(R.id.infoTXT);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
//the url
new getJsonInfoGif().execute("http://www.website.com/jsonApi");
}else{
Asynctask
public class getJsonInfoGif extends AsyncTask<String, Void, String>{
#Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(context);
progressDialog.setMessage("loading post...");
progressDialog.show();
}
#Override
protected String doInBackground(String... strings) {
return GET(strings[0]);
}
#Override
protected void onPostExecute(String res) {
try {
JSONObject jsonObject = new JSONObject("{'postinfo':[" + res + "]}");
JSONArray jsonArray = jsonObject.getJSONArray("postinfo");
JSONObject obj = jsonArray.getJSONObject(0);
//post title
titleStr.setText(obj.getString("name"));
//category and maker full name
//large image
JSONObject imgObj = obj.getJSONObject("thumbnails");
gifView.setUrl("http://www.website.com/my.gif");
} catch (JSONException e) {
e.printStackTrace();
}
if (progressDialog != null) {
progressDialog.dismiss();
}
}
}
GifView.java
public void setUrl(String urlStr){
this.urlStr = urlStr;
invalidate();
requestLayout();
}
public String getUrl(){
return this.urlStr;
}
public void init(final Context context)throws IOException{
setFocusable(true);
movie = null;
movieWidth = 0;
movieHeight = 0;
movieDuration = 0;
final Thread thread = new Thread(new Runnable() {
#Override
public void run(){
try{
Log.d("DEBUG", "URL" + urlStr);
URL url = new URL(urlStr);
try {
HttpURLConnection http = (HttpURLConnection) url.openConnection();
inputStream = http.getInputStream();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
movie = Movie.decodeStream(inputStream);
movieWidth = movie.width();
movieHeight = movie.height();
movieDuration = movie.duration();
((PostActivity) context).runOnUiThread(new Runnable() {
#Override
public void run() {
invalidate();
requestLayout();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}catch (Exception e){
e.printStackTrace();
}
}
});
thread.start();
}
Here is the Log from the url, it gives me null if I add the url inside my asynctask in Activity.
11-07 14:41:58.821 5674-6076/svenmobile.tools.showcase D/DEBUGļ¹• URLnull
What I want to know is what the problem is and how to solve it if possible.
Thanks in advance, Sven
Maybe you called init() before setUrl().
You can pass it the url in the contructor, or public void init(final Context context, String urlStr)throws IOException{
I also suggest you to move all that network code to doInBackground

How to move the marker in Google map when the latitude and longitude changes in webservices?

In my application am plotting a set of latitude and longitude from web services to Google map but when the Latitude and longitude changes in the web services the marker is not moving. when I close and open the application it updates the changes, but I need to move the marker without closing and restarting the application. My Updated code is given below .
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_layout_one, container, false);
MapsInitializer.initialize(getActivity());
mMapView = (MapView)rootView.findViewById(R.id.mapView);
mMapView.onCreate(mBundle);
MapsInitializer.initialize(getActivity());
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
/* new DownloadJSON().execute();
setUpMapIfNeeded(rootView); */
/*
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
#Override
public void run() {
// TODO Auto-generated method stub
new DownloadJSON().execute();
setUpMapIfNeeded(rootView);
Toast.makeText(getActivity(), "Data Updated!!!! ", Toast.LENGTH_SHORT).show();
Log.d("Data in Log", "");
}
}, 10*1000);*/
new DownloadJSON().execute();
setUpMapIfNeeded(rootView);
LocationManager locman = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
//locman.requestLocationUpdates(minTime, minDistance, criteria, intent);
locman.requestLocationUpdates(LocationManager.GPS_PROVIDER, 000, 10, this);
return rootView;
}
private void setUpMapIfNeeded(View inflatedView) {
if (mMap == null) {
mMap = ((MapView) inflatedView.findViewById(R.id.mapView)).getMap();
mMap.setMyLocationEnabled(true);
Location myLocation = mMap.getMyLocation();
if (mMap != null) {
// setUpMap();
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
#Override
public void onMyLocationChange(Location arg0) {
// TODO Auto-generated method stub
final LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (int i = 0; i < arraylist1.size(); i++) {
final LatLng position = new LatLng(Double
.parseDouble(arraylist1.get(i).get("Latitude")),
Double.parseDouble(arraylist1.get(i).get(
"Longitude")));
String ime1 = arraylist1.get(i).get("IME");
final MarkerOptions options = new MarkerOptions()
.position(position);
mMap.addMarker(options);
mMap.addMarker(options.icon(BitmapDescriptorFactory .fromResource(R.drawable.buspng)).title(ime1));
//options.title(ime1);
builder.include(position);
}
LatLng latLng = new LatLng(arg0.getLatitude(), arg0
.getLongitude());
mMap.setMyLocationEnabled(true);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
// mMap.setOnMapClickListener(null);
mMap.setOnMarkerClickListener(null);
mMap.animateCamera(CameraUpdateFactory.zoomTo(9));
}
});
}
}
}
/* protected void retrieveAndAddCities() throws IOException {
HttpURLConnection conn = null;
final StringBuilder json = new StringBuilder();
try {
URL url = new URL(SERVICE_URL);
conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
int read;
char[] buff = new char[1024];
while ((read = in.read(buff)) != -1) {
json.append(buff, 0, read);
}
} catch (IOException e) {
Log.e(LOG_TAG, "Error connecting to service", e);
throw new IOException("Error connecting to service", e);
} finally {
if (conn != null) {
conn.disconnect();
}
}
new DownloadJSON().execute();
} */
private class DownloadJSON extends AsyncTask<Void, Void, Void> {
String result="";
#Override
protected void onPreExecute() {
super.onPreExecute();
}
#Override
protected Void doInBackground(Void... params) {
try {
arraylist1 = new ArrayList<HashMap<String, String>>();
JSONParser jParser = new JSONParser();
String result = "";
json = jParser.getJSONFromUrl(SERVICE_URL);
try {
arraylist1.clear();
jsonarray = json.getJSONArray("SingleIMEs");
Log.d("Haaaaaaaaaaaa", "" + json);
for (int i = 0; i < jsonarray.length(); i++) {
Log.d("H11111111111111111111111111",
"" + jsonarray.length());
map = new HashMap<String, String>();
json = jsonarray.getJSONObject(i);
// pubname = json.getString("PubName");
latitude = json.getDouble("Latitude");
longitude = json.getDouble("Longitude");
ime = json.getString("IME");
// map.put("PubName", json.getString("PubName"));
//map.put("PubID", json.getString("PubID"));
map.put("Latitude", json.getString("Latitude"));
map.put("Longitude", json.getString("Longitude"));
map.put("IME", json.getString("IME"));
arraylist1.add(map);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
result="Error";
e.printStackTrace();
}
}catch(Exception e){
result="Error";
}
return null;
}
protected void onPostExecute(Void args) {
// mProgressDialog.dismiss();
}
}
#Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
#Override
public void onPause() {
super.onPause();
mMapView.onPause();
}
#Override
public void onDestroy() {
mMapView.onDestroy();
super.onDestroy();
}
#Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "onLocationUpdated!!!", Toast.LENGTH_SHORT).show();
Log.d("onLocationUpdated!!!","");
new DownloadJSON().execute();
setUpMapIfNeeded(rootView);
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
#Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
#Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
}
You can use handler for updating the location.Inside run() just call that webservice.And just put the marker in current location.
// Call current location API after 3 Min
handler.postDelayed(run, 3000 * 60);
Runnable run = new Runnable() {
#Override
public void run() {
if (isConnected(context)) {
new CurrentPosTask().execute();
} else {
Toast.makeText(context, "No internet connection",
Toast.LENGTH_LONG).show();
}
}
};
Don't forget call below method into onDestroy() method
// Stop the handler
handler.removeCallbacks(run);
Hope it will help you. Let me know once done.
You have to set repeat alarm to check the web service at intervel
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() +
60 * 1000, alarmIntent);
// Set the alarm to start at approximately 2:00 p.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
5000, alarmIntent);
and in alarm reciever class call web service and update the map position
public class AlarmReceiverextends WakefulBroadcastReceiver {
new DownloadJSON().execute();
setUpMapIfNeeded(rootView);
}
for full tutorial look developers.android
https://developer.android.com/training/scheduling/alarms.html

Android : getParams() called two times dont know why?

Here getParams() method called two times and added two times data at my server. I have also noticed that my logs print twice in logcat. It occurs when I check two checkbox of from contact picker list view to send data to server.
Here is my json data :
{
"send_data":[{
"gcm_reg_id":
"APA91bFPfAvEL_UJRHiOSohkekTh7M9qj1Kj307kFqmWh4VS8Re1aeejWSKXQnJb7q3OIjykCccbbI-0pn14DwvyjjL4ynQTHNR-m1p3vxLKy7ujGXv2MpIe0fhT2vcTJE0SW0uTjkD9iPJz0pw3sMuGojA4yxw0zg", "receiver_id":
"170"
},{
"gcm_reg_id":
"APA91bFheDJdBe3LwBk7MNchLitnKkECgVARxopr0HnFemo1vfW3Q0Mt1m6GXxccoq-wjUwoV-yXOVvcw9JwXcOZwAPyal9ZqMoA-U3fLNdaMa7pu8f-GYSyMsv16XKkgzPpzOPPKs8pc9C-7K1MhZXKgRf67DiXTSRY67swIOGP1XmJyoa3l1s", "receiver_id":
"166"
}]
}
Here is my code :
public class ContacsPicker extends ListActivity implements OnClickListener{
ProgressDialog dialog;
ConnectionDetector cd;
String phoneNumber ;
String conatct_num;
ArrayList<integer> status;
ImageView iv;
ArrayList<PhoneContactInfo> list;
JSONArray contact_noArray;
ArrayList<String> contact_database;
ArrayList<String> contact_userid;
ArrayList<String> image;
ListView list_view;
CustomListViewAdapter adpter;
String user_id,message,level,time,image_name,receiver_id,regId,mail;
Bitmap send_image;
Store_pref obj_Store_pref;
RegisterUser obj_RegisterUser;
ProgressDialog Dialog;
EditText edt_search;
ImageView iv_search;
RelativeLayout relative_search;
Boolean is_serch=false;
Matrix matrix = new Matrix();
send_data obj_Send_data;
String sender_regid,ba1, data;
Context mContext;
public Uri targetUri;
JSONObject obj;
Button button1_send;
ArrayList<String> checkedValue;
ArrayList<send_data> id_arrArrayList;
List<com.waycreon.picture_puzzle.model.RegisterUser.Registure_user> Registure_user;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts_picker);
mContext=this;
edt_search =(EditText) findViewById(R.id.edt_search);
iv_search=(ImageView)findViewById(R.id.iv_search);
button1_send=(Button) findViewById(R.id.button1_send);
button1_send.setOnClickListener(this);
relative_search=(RelativeLayout)findViewById(R.id.relative_search);
set_invisible_relative_search();
obj_Store_pref=new Store_pref(ContacsPicker.this);
regId=obj_Store_pref.get_GCMreg_id();
mail=obj_Store_pref.get_mail_id();
Log.i("GCM reg id in contact picker class", "++++"+regId);
Log.i("mail id in contact picker class", "++++"+mail);
iv_search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(!is_serch)
{
is_serch=true;
search_click();
}
else
{
is_serch=false;
close_click();
}
}
});
list_view=getListView();
message = getIntent().getStringExtra("message");
level = getIntent().getStringExtra("level");
time = getIntent().getStringExtra("time");
targetUri= (Uri) getIntent().getParcelableExtra("targetUri");
Log.i("get message", message);
Log.i("get level", level);
Log.i("get time", time);
Log.i("get send_image", send_image+"=");
Log.i("target uri", ""+targetUri);
try {
int orientation = getOrientation(this, targetUri);
Log.i("orientation on create", "++"+orientation);
matrix.postRotate(orientation);
send_image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), targetUri);
send_image= get_Resized_Bitmap(send_image,600,800);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
send_image.compress(Bitmap.CompressFormat.JPEG, 100, bao);
byte [] ba = bao.toByteArray();
ba1=Base64.encodeToString(ba,1);
Log.i("base 64", ba1);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
status=new ArrayList<integer>();
contact_database=new ArrayList<String>();
contact_userid=new ArrayList<String>();
image=new ArrayList<String>();
cd=new ConnectionDetector(this);
obj_Store_pref= new Store_pref(this);
dialog = new ProgressDialog(ContacsPicker.this);
dialog.setCancelable(false);
dialog.setMessage("Please Wait...");
dialog.setCancelable(false);
list = getAllPhoneContacts();
get_registered_no();
edt_search = (EditText) findViewById(R.id.edt_search);
edt_search .addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
String text = edt_search .getText().toString()
.toLowerCase(Locale.getDefault());
adpter.filter(text);
list_view.setAdapter(adpter);
adpter.notifyDataSetChanged();
}
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
});
id_arrArrayList=new ArrayList<send_data>();
list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
CheckBox cb = (CheckBox) arg1.findViewById(R.id.checkBox1_check);
cb.performClick();
receiver_id =arg1.getTag().toString();
// String gcm_reg_id=Registure_user.get(arg2).gcm_regid;
// Log.i("gcm_reg id on list click", gcm_reg_id);
Log.i("in if", receiver_id+"++++");
if(!arg1.getTag().equals("0"))
{
String[] separated = arg1.getTag().toString().split(" ");
String receiver_id =separated[0];
String gcm_reg_id=separated[1];
if (cb.isChecked()) {
Log.i("in if check box", receiver_id+"++++");
obj_Send_data = new send_data();
obj_Send_data.setReceiver_id(receiver_id);
obj_Send_data.setGcm_reg_id(gcm_reg_id);
id_arrArrayList.add(obj_Send_data);
Log.i("arraylist in if lisze", "++"+ id_arrArrayList.size());
} else if (!cb.isChecked()) {
id_arrArrayList.remove(obj_Send_data);
Log.i("arraylist in else lisze", "++"+ id_arrArrayList.size());
}
}
// if(!arg1.getTag().equals("0"))
// {
// receiver_id =arg1.getTag().toString();
// show_alert_invitation("Invitation","Are you sure you want to send puzzle to your friend ?");
//
// Log.i("in if ", receiver_id+"++++");
//
// Get_receiver_reg_id();
//
//
// }
// else
// {
// show_alert_unregister_user("Notification",getString(R.string.unregister_user_message));
// }
}
});![enter image description here][1]
}
public void onClick(View v) {
if(v==button1_send)
{
// Log.i("array list", receiver_id);
// Send_data();
show_alert_invitation("Invitation","Are you sure you want to send task to your friend ?");
}
}
private void get_registered_no() {
// TODO Auto-generated method stub
if (cd.isConnectingToInternet())
{
dialog.show();
RequestQueue queue = Volley.newRequestQueue(ContacsPicker.this);
String url="http://karmamobichamps.com/Restaurant_app/puzzle/puzzle_app_services.php?do=get_registered_no";
Log.i("url", url+"+++++++++++");
StringRequest myReq = new StringRequest(Method.GET,url,
Get_Event_list_ReqSuccessListener(),
Get_Event_list_ReqErrorListener());
queue.add(myReq);
}
else
{
cd.show_alert("no connection", "Please check with your internet Connection");
}
}
private ErrorListener Get_Event_list_ReqErrorListener() {
return new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
dialog.dismiss();
Log.i("Volly err", error.getLocalizedMessage()+"++++");
error.printStackTrace();
}
};
}
private Listener<String> Get_Event_list_ReqSuccessListener() {
return new Response.Listener<String>() {
public void onResponse(String response) {
dialog.dismiss();
Log.i("registration data", response+"");
try {
JSONObject jo=new JSONObject(response);
if(jo.getString("ResponseCode").equals("1"))
{
try
{
Gson gson = new GsonBuilder().create();
obj_RegisterUser= gson.fromJson(response, RegisterUser.class);
Registure_user=obj_RegisterUser.Registure_user;
Log.i("user size", Registure_user.size()+"--");
}
catch (Exception e) {
e.printStackTrace();
}
}
} catch (JSONException e1) {
e1.printStackTrace();
}
for(int i=0;i<list.size();i++)
{
image.add("0");
}
for(int i=0;i<list.size();i++)
{
for(int j=0;j<Registure_user.size();j++)
{
String[] separated = Registure_user.get(j).mobile_no.split(" ");
String mobilenono = separated[separated.length-1];
String country_code = separated[0];
// String mobilenono=separated[1];
String mobile_no=country_code+mobilenono;
if(list.get(i).getcontactNumber().equals(mobilenono) || list.get(i).getcontactNumber().equals(mobile_no) ||(list.get(i).getcontactNumber().equals(Registure_user.get(j).mobile_no)) ||list.get(i).getcontactNumber().equals("0"+mobilenono)) {
image.set(i,Registure_user.get(j).id.toString()+" "+Registure_user.get(j).gcm_regid.toString());
Log.i("match", list.get(i).getcontactNumber()+"==");
}
}
}
adpter=new CustomListViewAdapter(ContacsPicker.this, list,Registure_user,image);
list_view.setAdapter(adpter);
}
};
}
private void Send_data() {
data=Write_json();
Log.i("in send data method", data);
Dialog=new ProgressDialog(this);
Dialog.setTitle("sending..");
Dialog.setCancelable(false);
Dialog.show();
RequestQueue queue = Volley.newRequestQueue(ContacsPicker.this);
String url = null;
url = "http://karmamobichamps.com/Restaurant_app/puzzle/send_multi_data.php" ;
StringRequest myReq = new StringRequest(Method.POST,url,
send_data_ReqSuccessListener(),
send_data_ReqErrorListener())
{
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
// HashMap<String, String> params = new HashMap<String, String>();
// {
**params.put("data", data);
params.put("image", ba1);
params.put("sender_id", obj_Store_pref.get_user_id());
params.put("message", message);
params.put("level",level);
params.put("time", time);
params.put("status", "1");
Log.i("data in params", data);
Log.i("sender_id in params", obj_Store_pref.get_user_id());
Log.i("level",level);
Log.i("message in params", message);
Log.i("time in params", time);
Log.i("status in params", "1");**
return params;
};
};
queue.add(myReq);
}
private ErrorListener send_data_ReqErrorListener() {
return new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
Dialog.dismiss();
Log.i("Volly err", error.getLocalizedMessage()+"++++");
error.printStackTrace();
}
};
}
private Listener<String> send_data_ReqSuccessListener() {
return new Response.Listener<String>() {
public void onResponse(String response) {
Dialog.dismiss();
Log.i("registration data", response+"");
try {
JSONObject jo=new JSONObject(response);
if (jo.getString("ResponseCode").equals("1")) {
finish();
}
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
}
private void send_to_web() {
// TODO Auto-generated method stub
final String URL = "http://karmamobichamps.com/Restaurant_app/puzzle/send_multi_data.php";
// Post params to be sent to the server
HashMap<String, String> params = new HashMap<String, String>();
params.put("data", data);
// params.put("image", ba1);
// params.put("sender_id", obj_Store_pref.get_user_id());
// params.put("message", message);
// params.put("level",level);
// params.put("time", time);
// params.put("status", "1");
JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
new Response.Listener<JSONObject>() {
#Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
});
ApplicationController.getInstance().addToRequestQueue(req);
}
private void show_alert_invitation(String title,String msg) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle(title)
.setMessage(msg)
.setCancelable(false)
.setPositiveButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// new ImageUpload().execute();
Send_data();
// send_to_web();
Log.i("bitmap width in contact picker", ""+send_image.getWidth());
Log.i("bitmap height in contact picker", ""+send_image.getHeight());
dialog.cancel();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
private void show_alert_unregister_user(String title,String msg) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle(title)
.setMessage(msg)
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_SUBJECT, "Swapatask");
String sAux = "\nHeyy use this amazing application i m using too...\n\n";
sAux = sAux + "https://play.google.com/store/apps/details?id=com.waycreon.picture_puzzle \n\n";
i.putExtra(Intent.EXTRA_TEXT, sAux);
startActivity(Intent.createChooser(i, "choose one"));
}
})
.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
#Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
}
private void set_visible_relative_search() {
relative_search.setVisibility(RelativeLayout.VISIBLE);
}
private void set_invisible_relative_search() {
relative_search.setVisibility(RelativeLayout.GONE);
}
private void search_click() {
iv_search.setImageResource(R.drawable.close);
set_visible_relative_search();
edt_search.setFocusable(true);
}
private void close_click() {
iv_search.setImageResource(R.drawable.search_button);
set_invisible_relative_search();
edt_search.setText("");
}
/*============================get local to phone all contect===================================*/
public ArrayList<PhoneContactInfo> getAllPhoneContacts() {
Log.d("START","Getting all Contacts");
ArrayList<PhoneContactInfo> arrContacts = new ArrayList<PhoneContactInfo>();
PhoneContactInfo phoneContactInfo=null;
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone._ID}, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
cursor.moveToFirst();
while (cursor.isAfterLast() == false)
{
String contactNumber= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
int phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
if (contactNumber.length()>0)
{
phoneContactInfo = new PhoneContactInfo();
phoneContactInfo.setphoneContactID(phoneContactID);
phoneContactInfo.setcontactName(contactName);
phoneContactInfo.setcontactNumber(contactNumber.replaceAll("\\s+",""));
arrContacts.add(phoneContactInfo);
}
phoneContactInfo = null;
cursor.moveToNext();
}
cursor.close();
cursor = null;
Log.d("END","Got all Contacts");
return arrContacts;
}
private void Send_push() {
// Dialog.show();
RequestQueue queue = Volley.newRequestQueue(ContacsPicker.this);
String url = null;
try {
url = "http://karmamobichamps.com/Restaurant_app/puzzle/puzzle_app_services.php?do=Receive_Push_notification&gcm_regid="
+sender_regid+"&message="+URLEncoder.encode("You Have Received Swapatask Request", "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("rgister url", url);
StringRequest myReq = new StringRequest(Method.GET,url,
Registration_ReqSuccessListener(),
Registration_ReqErrorListener());
queue.add(myReq);
}
private ErrorListener Registration_ReqErrorListener() {
return new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
// Dialog.dismiss();
Log.i("Volly err", error.getLocalizedMessage()+"++++");
error.printStackTrace();
}
};
}
private Listener<String> Registration_ReqSuccessListener() {
return new Response.Listener<String>() {
public void onResponse(String response) {
// Dialog.dismiss();
Log.i("registration data", response+"");
//
}
};
}
public Bitmap get_Resized_Bitmap(Bitmap bmp, int newHeight, int newWidth) {
int width = bmp.getWidth();
int height = bmp.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// CREATE A MATRIX FOR THE MANIPULATION
// Matrix matrix = new Matrix();
// RESIZE THE BIT MAP
matrix.postScale(scaleWidth, scaleHeight);
// matrix.postRotate(90);
// "RECREATE" THE NEW BITMAP
Bitmap newBitmap = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);
return newBitmap ;
}
public static int getOrientation(Context context, Uri photoUri) {
/* it's on the external media. */
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);
if (cursor.getCount() != 1) {
return -1;
}
cursor.moveToFirst();
return cursor.getInt(0);
}
private String Write_json() {
// TODO Auto-generated method stub
Log.i("arraylist lisze in next button", "++"+ id_arrArrayList.size());
obj = new JSONObject();
JSONArray list1 = new JSONArray();
try {
for (int i = 0; i < id_arrArrayList.size(); i++) {
String gcm_reg_id=Registure_user.get(i).gcm_regid;
JSONObject jsonObject=new JSONObject();
jsonObject.put("receiver_id", id_arrArrayList.get(i).getReceiver_id());
jsonObject.put("gcm_reg_id", id_arrArrayList.get(i).getGcm_reg_id());
Log.i("gcm_reg_id", gcm_reg_id);
list1.put(jsonObject);
}
obj.put("send_data", list1);
}catch (Exception e) {
e.printStackTrace();
}
return obj.toString();
}
// public class ImageUpload extends AsyncTask<String, String,String>
// {
// Bitmap bitmap;
// public ImageUpload()
// {
// // TODO Auto-generated constructor stub
//// this.bitmap=bitmap;
// }
// #Override
// protected void onPreExecute()
// {
// dialog.show();
// super.onPreExecute();
//
// }
// #Override
// protected String doInBackground(String... params)
// {
// // TODO Auto-generated method stub
// try
// {
//// ByteArrayOutputStream bao = new ByteArrayOutputStream();
//// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bao);
//// byte [] ba = bao.toByteArray();
//// String ba1=Base64.encodeToString(ba,1);
// Log.i("base 64", ba1);
// ArrayList<NameValuePair> nameValuePairs = new enter code hereArrayList<NameValuePair>();
// HttpClient httpclient = new DefaultHttpClient();
// HttpPost httppost = new HttpPost("http://karmamobichamps.com/Restaurant_app/puzzle/send_multi_data.php");
// Log.i("url", ""+httppost);
// nameValuePairs.add(new BasicNameValuePair("data", data));
// nameValuePairs.add(new BasicNameValuePair("image", ba1));
// nameValuePairs.add(new BasicNameValuePair("sende
To identify the root of this issue you'll need to debug and see what's the path in which getParams is called.
You could either breakpoint within getParams block or print the stack trace to log like so:
Throwable throwable = new IllegalArgumentException("Something");
throwable.printStackTrace();
Add this before adding request to request queue
request.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

How to get user details after successful Login through Facebook

I tried this: when isSessionValid getDetails directly else facebook.authorize and then getDetails in onActivityResult
public class MainActivity extends Activity {
Facebook facebook = new Facebook("xxxxxxxxxxxxxxxx");
AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
private SharedPreferences mPrefs;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
facebook.setAccessToken(access_token);
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid()) {
facebook.authorize(this, new String[] {}, new DialogListener() {
#Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires",
facebook.getAccessExpires());
editor.commit();
}
#Override
public void onFacebookError(FacebookError error) {
}
#Override
public void onError(DialogError e) {
}
#Override
public void onCancel() {
}
});
}else{
try {
JSONObject json = Util.parseJson(facebook.request("me"));
String facebookID = json.getString("id");
String firstName = json.getString("first_name");
String lastName = json.getString("last_name");
String email = json.getString("email");
String gender = json.getString("gender");
} catch (Exception e) {
}
}
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
try {
JSONObject json = Util.parseJson(facebook.request("me"));
String facebookID = json.getString("id");
String firstName = json.getString("first_name");
String lastName = json.getString("last_name");
String email = json.getString("email");
String gender = json.getString("gender");
} catch (Exception e) {
}
}
public void onResume() {
super.onResume();
facebook.extendAccessTokenIfNeeded(this, null);
}
}
This works fine when I have facebook app installed on my system. But If not installed i get a Web View to enter facebook credentials and in logcat shows login-success, but none of the getDetails block is called.
Here in initFacebook() function through you can login and perform you functionality, here i am fetching user's friends information.
private void initFacebook()
{
try
{
if (APP_ID == null)
{
Util.showAlert(this,"Warning","Facebook Applicaton ID must be "+ "specified before running this example: see Example.java");
}
mFacebook = new Facebook();
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
mFacebook.authorize(FacebookList.this, APP_ID, new String[] {"email", "read_stream", "user_hometown", "user_location","friends_about_me", "friends_hometown", "friends_location","user_relationships", "friends_relationship_details","friends_birthday", "friends_education_history","friends_website" }, new DialogListener()
{
public void onComplete(Bundle values)
{
getHTTPConnection();
}
public void onFacebookError(FacebookError error)
{
Log.i("public void onFacebookError(FacebookError error)....","....");
}
public void onError(DialogError e)
{
Log.i("public void onError(DialogError e)....", "....");
CustomConfirmOkDialog dialog = new CustomConfirmOkDialog(FacebookList.this, R.style.CustomDialogTheme, Utils.FACEBOOK_CONNECTION_ERROR);
dialog.show();
}
public void onCancel()
{
Log.i("public void onCancel()....", "....");
}
});
SessionStore.restore(mFacebook, this);
SessionEvents.addAuthListener(new SampleAuthListener());
SessionEvents.addLogoutListener(new SampleLogoutListener());
}
catch (Exception e)
{
e.printStackTrace();
}
}
Here in getHTTPConnection(), proceeding for connection and sending fields, that we require about user's friends as here we can see that passing fields are fields=id,first_name,last_name,location,picture of friends. here you can change this fields according to application's requirements.
private void getHTTPConnection()
{
try
{
mAccessToken = mFacebook.getAccessToken();
HttpClient httpclient = new DefaultHttpClient();
String result = null;
HttpGet httpget = new HttpGet("https://graph.facebook.com/me/friends?access_token="+ mAccessToken + "&fields=id,first_name,last_name,location,picture");
HttpResponse response;
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
result = EntityUtils.toString(entity);
parseJSON(result);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
Now after successfully connecting with facebook , we are getting JSON data and further to parse it .
private void parseJSON(String data1) throws Exception,NullPointerException, JSONException
{
try
{
JSONObject jObj = new JSONObject(data1);
JSONArray jObjArr = jObj.optJSONArray("data");
int lon = jObjArr.length();
for (int i = 0; i < lon; i++)
{
JSONObject tmp = jObjArr.optJSONObject(i);
String temp_image = tmp.getString("picture"); String temp_fname = tmp.getString("first_name");
String temp_lname = tmp.getString("last_name");
String temp_loc = null;
JSONObject loc = tmp.getJSONObject("location");
temp_loc = loc.getString("name");
}
}
catch (Exception e)
{
Log.i("Exception1 is Here>> ", e.toString());
e.printStackTrace();
}
}
It is assumed that you have already added a facebook jar in to your application and for proceeding this code you can call initFacebook() in to onCreate() of your activity

Categories