is there a better way to retrieve this Json? - json

I've made this code to download this JSON:
private void rxPublishProgress()
{
final OkHttpClient mOkHttpClient = new OkHttpClient();
final Request mRequest = new Request.Builder().url(AirportService.SERVICE_ENDPOINT).build();
Observable.create(new Observable.OnSubscribe<String>()
{
#Override
public void call(Subscriber<? super String> subscriber)
{
try {
InputStream inputStream;
okhttp3.Response response = mOkHttpClient.newCall(mRequest).execute();
if (response.isSuccessful())
{
inputStream = response.body().byteStream();
long len = response.body().contentLength();
String progress = "0";
subscriber.onNext(progress);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
byte[] data = new byte[1024];
long total = 0;
int count;
String line = null;
final int bufferSize = 1024;
boolean flag = false;
JSONObject jsonObject = null;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(inputStream, "UTF-8");
for(;flag ==false ;)
{
count = in.read(buffer, 0, buffer.length);
if (count == -1)
{
progress = "100";
subscriber.onNext(progress);
flag = true;
}
else
{
out.append(buffer, 0, count);
// Log.d("out",out.toString());
total += count;
progress = String.valueOf(total * 100 / len);
subscriber.onNext(progress);
}
}
inputStream.close();
// try parse the string to a JSON object
try
{
jsonObject = new JSONObject(out.toString());
}
catch (JSONException e)
{
e.printStackTrace();
}
Log.d("lengt",String.valueOf(jsonObject.length()));
subscriber.onCompleted();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.newThread()).subscribe(new Subscriber<String>() {
#Override
public void onCompleted()
{
Log.d("Complete","complete");
}
#Override
public void onError(Throwable e)
{
}
#Override
public void onNext(final String progress) {
getActivity().runOnUiThread(new Runnable() {
#Override
public void run()
{
percentage.setText(progress+"%");
}
});
}
});
and it works, but I don't know how to retrieve this JSON or to convert with GSON.
I need to retrieve the percentage of download because it's a specific request of this project, but I need also the JSONObject or the List . How could I do to have this?
Thanks

As i got you have 1 Observable and you need:
1) display percentage
2) do something else
So you can do like this:
Observable<okhttp3.Response> responseObservable = Observable.create(/*your code to return response*/)
.subscribeOn(Schedulers.newThread())
.replay(1)
.refCount();
responseObservable
.map(toPercents())
.subscribe(displayPercents());
responseObservable
.map(toSomethingElse())
.subscribe(displaySomethingElse());

Related

I have a problem to use Volley. want to use POST method with some parameters and get Array type response but my response is not array type

I have a problem using Volley. want to use POST method with some parameters and get Array type response but my response is not an array type. Here, I share my request code and response.
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest postRequest = new StringRequest(Request.Method.POST, "https://umrahtech.com/umrahtechapi.php",
new Response.Listener<String>() {
#Override
public void onResponse(String response) {
// response
Log.d("Response", response);
route = null;
route_spinner.setSelection(0);
check_in_date = null;
check_out_date = null;
adults = child = room = child1 = child2 = child3 = child4 = child5 = 0;
text_adults.setText("0 Adult");
text_child.setText("0 Child");
text_room.setText("0 Room");
layout_child.setVisibility(View.GONE);
in_date.setText("Add Date");
out_date.setText("Add Date");
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", error.toString());
}
}) {
#Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("case", "hotel_makkah");
params.put("location", route);
params.put("check_in_1", check_in_date);
params.put("check_out_1", check_out_date);
params.put("passengers", room_array.toString());
return params;
}
};
queue.add(postRequest);
when u use string request response you get will be string also.
you should turn that response to JsonArray , then get bojects from that JsonArray something like this :
if (response != null) {
JSONArray fetchlist = JSONArray(response);
for (int i=0 ; i<fetchlist .lenght ; i++) {
JSONObject obj = fetchlist.getJSONObject(i);
Int idd = obj.getInt("genderid");
I have solved this question in this way. Where hudx_Object and hudx_JSON is JSONObject
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest hudxconnect = new StringRequest(Request.Method.POST, "https://umrahtech.com/umrahtechapi.php",
new Response.Listener<String>() {
#Override
public void onResponse(String response) {
try {
hudx_Object = new JSONObject(response);
if (hudx_Object != null) {
hudx_JSON = hudx_Object.getJSONObject("response");
hudx_Object = new JSONObject(hudx_JSON.toString());
} else {
hudx_Object = null;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", error.toString());
progressDialog.dismiss();
}
}) {
#Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("case", "hotel_makkah");
params.put("location", route);
params.put("check_in_1", check_in_date);
params.put("check_out_1", check_out_date);
params.put("passengers", room_array.toString());
return params;
}
};

Error initialising a JSONObject from a string

I'm trying to parse JSON from this
string x = "http://www.neowsapp.com/rest/v1/neo/3725762?api_key=DEMO_KEY";
In the browser I can see all the data from this link, but in the parsing method, it can't be converted to a JSONObject.
The error is in this line, in the Utilsul class:
root = new JSONObject(x);
Here is the class containing all the methods for parsing:
public class Utilsul {
private static URL createURL(String x){
URL myurl = null;
try {
myurl = new URL(x);
} catch (MalformedURLException e) {
e.printStackTrace();
}
// Log.i("obtine link ", myurl.toString());
return myurl;
}
private static String raspunsul(URL myurl){
String rasp = "";
HttpURLConnection httpURLConnection = null;
InputStream inputStream = null;
try {
httpURLConnection = (HttpURLConnection) myurl.openConnection();
inputStream = httpURLConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String liniaCurenta = "";
StringBuffer stringBuffer = new StringBuffer();
while ((liniaCurenta = bufferedReader.readLine())!=null){
stringBuffer.append(liniaCurenta);
}
rasp = stringBuffer.toString();
bufferedReader.close();
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
httpURLConnection.disconnect();
}
// Log.i("Obtine Raspuns", rasp);
return rasp;
}
private static ArrayList<Obiectul> obtineSir(String x){
ArrayList<Obiectul> sirul = new ArrayList<>();
JSONObject root = null;
try {
root = new JSONObject(x);
// Log.i("Obtine root ", root.toString());
JSONArray sirJONURI = root.getJSONArray("close_approach_data");
for (int i=0; i<sirJONURI.length(); i++){
JSONObject obiectCurent = sirJONURI.getJSONObject(i);
String data = obiectCurent.getString("close_approach_date");
JSONObject jsonViteza = obiectCurent.getJSONObject("relative_velocity");
String viteza = jsonViteza.getString("kilometers_per_hour");
JSONObject jsonDistanta = obiectCurent.getJSONObject("miss_distance");
String distanta = jsonDistanta.getString("kilometers");
sirul.add(new Obiectul(data, viteza, distanta));
}
} catch (JSONException e) {
e.printStackTrace();
}
return sirul;
}
public static ArrayList<Obiectul> toateOdata(String x){
URL ur = createURL(x);
String raspuns = raspunsul(ur);
ArrayList<Obiectul> sir = obtineSir(raspuns);
return sir;
}
}
And here is the class where the parsing will be execute:
public class ActivityB extends AppCompatActivity {
RecyclerView rv;
AdaptorRecycler mAdapter;
ArrayList<Obiectul> sirul;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
rv = findViewById(R.id.toataLista);
rv.setLayoutManager(new LinearLayoutManager(this));
ClasaAsy clasaAsy = new ClasaAsy();
clasaAsy.execute(linkul());
}
private String linkul(){
String link = "http://www.neowsapp.com/rest/v1/neo/3725762?api_key=DEMO_KEY";
return link;
}
public class ClasaAsy extends AsyncTask<String, Void, ArrayList<Obiectul>>{
#Override
protected ArrayList<Obiectul> doInBackground(String... strings) {
ArrayList<Obiectul> sir = Utilsul.toateOdata(strings[0]);
return sir;
}
#Override
protected void onPostExecute(ArrayList<Obiectul> obiectuls) {
mAdapter = new AdaptorRecycler(ActivityB.this, obiectuls);
rv.setAdapter(mAdapter);
}
}
And here is the Adapter for the RecyclerView (which is tested working, with an ArrayList randomly written).
public class AdaptorRecycler extends RecyclerView.Adapter<AdaptorRecycler.ClasaVH> {
Context context;
ArrayList<Obiectul> sirul;
public AdaptorRecycler(Context context, ArrayList<Obiectul> sirul) {
this.context = context;
this.sirul = sirul;
}
public class ClasaVH extends RecyclerView.ViewHolder{
TextView data, viteza, distanta;
public ClasaVH(#NonNull View itemView) {
super(itemView);
data = itemView.findViewById(R.id.textView2);
viteza = itemView.findViewById(R.id.textView3);
distanta = itemView.findViewById(R.id.textView4);
}
}
#NonNull
#Override
public ClasaVH onCreateViewHolder(#NonNull ViewGroup parent, int viewType) {
return new ClasaVH(LayoutInflater.from(context).inflate(R.layout.randul, parent, false));
}
#Override
public void onBindViewHolder(#NonNull ClasaVH holder, int position) {
Obiectul a = sirul.get(position);
holder.data.setText(a.getData());
holder.viteza.setText(a.getViteza());
holder.distanta.setText(a.getDistanta());
}
#Override
public int getItemCount() {
return sirul.size();
}
}
For some reason, the JSONObject root is never initialised and I couldn't find why.
Please kindly give me an idea, what else should I try.
Thanks

passing arraylist item of tabfragment recyclerview to other activity recyclerview

I have fetched JSonarray data as string and have added it to arraylist i.e
this is done on a tab fragment recycler view .
JSONObject jsonObject = response.getJSONObject(index);
// Log.d("TAG", jsonObject.getString("title"));
int id =jsonObject.getInt("id");
String title=jsonObject.getString("title");
// Log.d("TAG", jsonObject.getString("description"));
String shortDec=jsonObject.getString("description");
String longDec=jsonObject.getString("short_description");
String imguUrl=jsonObject.getString("image");
String createdAt=jsonObject.getString("created_at");
// Toast.makeText(NewsDetailsActivity.this, "\nTitle: "+title+"\n Description:", Toast.LENGTH_SHORT).show();
NewsListGetter newsListGetter=new NewsListGetter(id, title, shortDec,longDec,imguUrl,createdAt);
arrayList.add(newsListGetter);
adapter.notifyDataSetChanged();
I have another activity called NewsDetailsAcivity,in which I have implemented a recycler view.
I want to pass only the data from recylerview of tab1fragment which is clicked,to the newsDetailActivity recylerview.
Your response is already in JSONArray no need to store in another JSON Array.
Look at the code below.
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url = "http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/getnewsfeeds?order=asc";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
#Override
public void onResponse(JSONArray response) {
for (int index = 0; index < response.length(); index++) {
try {
JSONObject jsonObject = response.getJSONObject(index);
Log.d("TAG", jsonObject.getString("title"));
Log.d("TAG", jsonObject.getString("description"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(request);
Take Your Response.Listener in String first like
new Response.Listener<String>
Then Store your response in JSONObject, and then get JSONArray from stored JSONObject. Like this:
JSONObject data = new JSONObject(response);
JSONArray responseArray = data.getJSONArray("data"); // here data is Key of your JsonArray.
Hope this helps you!
As per your JSON Response You can paste this code. I tasted this on my machine and working, Let me know if any issue is there
String json_url = "http://ec2-54-147-238-136.compute-.amazonaws.com/hmc/api/getnewsfeeds?order=asc";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
#Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
try {
JSONObject jObj = response.getJSONObject(i);
Log.d("TAG", jObj.getString("title"));
Log.d("TAG", jObj.getString("description"));
} catch (JSONException exc) {
exc.printStackTrace();
}
}
}
}
How to save data in ArrayList
Create SampleModelClass
public class SampleModelClass {
private String id;
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Now in your activity Where you are parsing JSON, Do the Same
JSONArray root_array = root_obj.getJSONArray("YOUR_ARRAY_NODE_NAME");
for (int i = 0; i < root_array.length(); i++) {
SampleModelClass commonModels = new SampleModelClass();
JSONObject array_object = root_array.getJSONObject(i);
commonModels.setId(array_object.optString("id"));
commonModels.setDescription("description");
common_stop_list.add(commonModels);
}
} catch (JSONException e) {
e.printStackTrace();
}
adapter.notifyDataSetChanged();

json parsing using uri for listview in android

ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
//URL to get JSON Array
private static String url = "http://jsonplaceholder.typicode.com/posts";
//JSON Node Names
// private static final String TAG_OS = "Employee";
private static final String TAG_USER= "userId";
private static final String TAG_NAME = "id";
private static final String TAG_TITLE = "title";
private static final String TAG_BODY = "body";
JSONArray android = null;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList<HashMap<String, String>>();
Btngetdata = (Button)findViewById(R.id.getdata);
Btngetdata.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
new JSONParse().execute();
}
});
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
#Override
protected void onPreExecute() {
super.onPreExecute();
ver = (TextView)findViewById(R.id.user);
name = (TextView)findViewById(R.id.id);
api = (TextView)findViewById(R.id.titile);
body =(TextView)findViewById(R.id.body);
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
#Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
#Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
// Getting JSON Array from URL
android = json.getJSONArray("");
for(int i = 0; i < android.length(); i++){
JSONObject c = android.getJSONObject(i);
// Storing JSON item in a Variable
String ver = c.getString(TAG_USER);
String name = c.getString(TAG_NAME);
String api = c.getString(TAG_TITLE);
String body =c.getString(TAG_BODY);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_USER, ver);
map.put(TAG_NAME, name);
map.put(TAG_TITLE, api);
map.put(TAG_BODY, body);
list.add(map);
List=(ListView)findViewById(R.id.list);
ListAdapter adapter = new SimpleAdapter(MainActivity.this, list,
R.layout.list_v,
new String[] { TAG_USER,TAG_NAME, TAG_TITLE,TAG_BODY }, new int[] {
R.id.user,R.id.id, R.id.titile,R.id.body});
List.setAdapter(adapter);
List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at "+list.get(+position).get("name"), Toast.LENGTH_SHORT).show();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
json parse:-
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Logcat here
java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArrayorg.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference
at com.example.mind.sqlitedatabase.MainActivity$JSONParse.onPostExecute(MainActivity.java:134)
at com.example.mind.sqlitedatabase.MainActivity$JSONParse.onPostExecute(MainActivity.java:103)
at android.os.AsyncTask.finish(AsyncTask.java:636)
at android.os.AsyncTask.access$500(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Actually, I faced problem when I click get button to call uri for json parsing.
But when in android device json = null parsing...
Here I used Volley library, it handle the all the things which you did manually(Asynctask, httprequest for json).
I hope it may helps you
// JsonObject request
public void getJSONFromUrl(String url) {
RequestQueue queue = Volley.newRequestQueue(getActivity());
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
url, null,
new Response.Listener<JSONObject>() {
#Override
public void onResponse(JSONObject response) {
Log.d("Response", "Response" + response);
//handle the json response
handleResponse(response);
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d("Error", "Error: " + error.getMessage());
}
});
queue.add(jsonObjReq);
}
// converting from json to Map using JsonHelper class
public void handleResponse(JSONObject response) {
Map<String, Object> map = new HashMap<>();
if(response != null){
try {
// JsonObject to Map
map = JsonHelper.toMap(response);
// boolean isSuccess = map.get("success")
// if(isSuccess){
//}
if (map.size() != 0){
// use the data
}
Log.d("MAp","map" + map);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
here below class will help converting json response to MAP, from map to json.
copied from https://gist.github.com/codebutler/2339666
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.*;
public class JsonHelper {
public static Object toJSON(Object object) throws JSONException {
if (object instanceof Map) {
JSONObject json = new JSONObject();
Map map = (Map) object;
for (Object key : map.keySet()) {
json.put(key.toString(), toJSON(map.get(key)));
}
return json;
} else if (object instanceof Iterable) {
JSONArray json = new JSONArray();
for (Object value : ((Iterable)object)) {
json.put(value);
}
return json;
} else {
return object;
}
}
public static boolean isEmptyObject(JSONObject object) {
return object.names() == null;
}
public static Map<String, Object> getMap(JSONObject object, String key) throws JSONException {
return toMap(object.getJSONObject(key));
}
public static Map<String, Object> toMap(JSONObject object) throws JSONException {
Map<String, Object> map = new HashMap();
Iterator keys = object.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
map.put(key, fromJson(object.get(key)));
}
return map;
}
public static List toList(JSONArray array) throws JSONException {
List list = new ArrayList();
for (int i = 0; i < array.length(); i++) {
list.add(fromJson(array.get(i)));
}
return list;
}
private static Object fromJson(Object json) throws JSONException {
if (json == JSONObject.NULL) {
return null;
} else if (json instanceof JSONObject) {
return toMap((JSONObject) json);
} else if (json instanceof JSONArray) {
return toList((JSONArray) json);
} else {
return json;
}
}
}
volley library usage
http://www.androidhive.info/2014/09/android-json-parsing-using-volley/

Error in deleting file using Drive Rest API + Drive Android Api. drive.files().delete(driveid.getResourceId())

Drive REST API + GDAA not able to delete the file.
Gone through this question and comments How to delete a file on google drive using Google Drive Android API but when I use driveid.getResourceId(); to pass as a fileId parameter to old Drive API service.files().delete() method its giving error:
Error Required parameteres must be passed it may lead to Dead Lock
My code:
public class MainActivity extends Activity implements ConnectionCallbacks,
OnConnectionFailedListener {
private GoogleAccountCredential credential;
private static final int REQUEST_CODE_CREATOR = 2;
private static final int REQUEST_CODE_RESOLUTION = 3;
private static final int PICKFILE_RESULT_CODE = 1;
private static Uri fileUri;
private ContentsResult contentsresult;
private GoogleApiClient mGoogleApiClient;
byte[] buffer;
String EXISTING_FILE_ID = "";
int folderCreated = 0;
SharedPreferences prefs;
ArrayList<String> dbfileid = new ArrayList<String>();
ArrayList<String> dbfilename = new ArrayList<String>();
String fdd="";
DriveFolderResult sky;
private DriveId mFolderDriveId;
String isfolder;
SharedPreferences sp;
String Shared="Shared";
String folderid="";
SQLiteOpenHelper dbhelper;
SQLiteDatabase database;
int j=0;
String songfileid="";
private static com.google.api.services.drive.Drive service;
private static final String LOGTAG="EXPLORECA";
private static final String DATABASE_NAME="file.db";
private static final int DATABASE_VERSION=1;
private static final String TABLE="fileids";
private static final String filename="fname";
private static final String fileid="fid";
String realid ="";
#Override
protected void onResume() {
super.onResume();
initDrive();
}
private void initDrive() {
credential = GoogleAccountCredential.usingOAuth2(this,Arrays.asList(DriveScopes.DRIVE.split(",")));
credential.setSelectedAccountName("shivrajp130#gmail.com");
service = getDriveService(credential);
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(com.google.android.gms.drive.Drive.API)
.addScope(com.google.android.gms.drive.Drive.SCOPE_FILE).setAccountName("shivrajp130#gmail.com")
.addConnectionCallbacks(this).addOnConnectionFailedListener(this).build();
}
mGoogleApiClient.connect();
}
#Override
public void onConnectionFailed(ConnectionResult result) {
// Called whenever the API client fails to connect.
if (!result.hasResolution()) {
// show the localized error dialog.
showToast("Error in on connection failed");
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this,
0).show();
return;
}
try {
result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
} catch (SendIntentException e) {
showToast("error" + e.toString());
}
}
#Override
public void onConnected(Bundle connectionHint) {
showToast("Inside Connected");
sp = getSharedPreferences(Shared, Context.MODE_PRIVATE);
showToast("Inside Connected");
createSkyFolder();
}
private void createSkyFolder()
{
// TODO Auto-generated method stub
try
{
showToast("creating Folder");
if(!sp.getString(isfolder, "false").contains("created"))
{
MetadataChangeSet changeSet = new MetadataChangeSet.Builder().
setTitle("Sky folder").build();
sky = Drive.DriveApi.getRootFolder(getGoogleApiClient())
.createFolder(getGoogleApiClient(), changeSet).await();
showToast("folder created");
sp.edit().putString(isfolder, "created").commit();
// To store secret ID string of file or folder so that we can later get a DriveId object.
realid = sky.getDriveFolder().getDriveId().encodeToString();
sp.edit().putString(folderid, realid).commit();
showToast("Real== "+realid);
}
DriveId retid = DriveId.decodeFromString(sp.getString(folderid, ""));
DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), retid);
MetadataChangeSet changeSet2 = new MetadataChangeSet.Builder()
.setTitle("New folder")
.build();
MetadataResult res = folder.updateMetadata(getGoogleApiClient(), changeSet2).await();
showToast("Folder== "+folder.getDriveId().encodeToString());
showToast("folder created");
upladfile();
}
catch(Exception e)
{
showToast(""+e);
}
}
private void upladfile() {
// TODO Auto-generated method stub
String storedId=sp.getString(folderid, "");
DriveId retid = DriveId.decodeFromString(storedId);
DriveFolder skyfolder = Drive.DriveApi.getFolder(getGoogleApiClient(), retid);
contentsresult = Drive.DriveApi.newContents(mGoogleApiClient).await();
OutputStream outputStream = contentsresult.getContents().getOutputStream();
String s = Environment.getExternalStoragePublicDirectory("Download")
.getPath().toString();
showToast(s);
File file = new File(s + "/k.mp3");
showToast("Path=" + Environment.DIRECTORY_DOWNLOADS + "/k"
+ file.length());
buffer = new byte[(int) file.length()];
try {
showToast("started reading n writing");
outputStream.write(buffer);
showToast("Buffer is written");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
showToast("" + e.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
showToast("" + e.toString());
}
showToast("" + contentsresult.getContents().toString());
//DriveFolder fldr = Drive.DriveApi.getFolder(getGoogleApiClient(),sky.getDriveFolder().getDriveId());
MetadataChangeSet changeSet2 = new MetadataChangeSet.Builder()
.setTitle("New file").setMimeType("audio/MP3").setStarred(true)
.build();
showToast("meta data created");
DriveFileResult fileresult = skyfolder.createFile(getGoogleApiClient(),
changeSet2, contentsresult.getContents()).await();
songfileid = fileresult.getDriveFile().getDriveId().encodeToString();
showToast("file has been created "+fileresult.toString());
// Status stat = Drive.DriveApi.requestSync(mGoogleApiClient).await();
showToast("await() complete");
if (!contentsresult.getStatus().isSuccess()) {
showToast("Error while trying to create the file");
return;
}
add_to_db();
getvalues();
//String storedId=sp.getString(folderid, "");
DriveId fffid = DriveId.decodeFromString(dbfileid.get(0));
DriveFile fff = Drive.DriveApi.getFile(getGoogleApiClient(), fffid);
MetadataChangeSet changeSet3 = new MetadataChangeSet.Builder()
.setTitle("renamed")
.build();
MetadataResult res = fff.updateMetadata(getGoogleApiClient(), changeSet3).await();
if(res!=null)
{
showToast("renamed"+res.getMetadata().getTitle());
}
try {
//String iid=fffid.getResourceId();
service.files().delete(fffid.getResourceId()).execute();
showToast("Delete");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
#Override
protected void onActivityResult(final int requestCode,
final int resultCode, final Intent data) {
if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) {
mGoogleApiClient.connect();
showToast("Connected");
}
}
#Override
protected void onPause() {
if (mGoogleApiClient != null) {
mGoogleApiClient.disconnect();
}
super.onPause();
}
public void showToast(final String toast) {
runOnUiThread(new Runnable() {
#Override
public void run() {
Toast.makeText(getApplicationContext(), toast,
Toast.LENGTH_SHORT).show();
}
});
}
public GoogleApiClient getGoogleApiClient() {
return mGoogleApiClient;
}
public void add_to_db()
{
dbhelper=new fileiddb(this);
database=dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
String id =songfileid;
String name="k";
showToast("database id ="+id);
values.put(fileid,id);
values.put(filename,name);
database.insert(TABLE, null, values);
database.close();
Toast.makeText(this,"Added Successfully" ,Toast.LENGTH_LONG).show();
}
public void getvalues()
{
showToast("getting Values");
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE;
dbhelper=new fileiddb(this);
database=dbhelper.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
dbfileid.add(cursor.getString(0));
dbfilename.add(cursor.getString(1));
showToast("id=="+dbfileid.get(j).toString());
j++;
} while (cursor.moveToNext());
}
}
private com.google.api.services.drive.Drive getDriveService(GoogleAccountCredential credential) {
return new com.google.api.services.drive.Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential)
.build();
}
#Override
public void onConnectionSuspended(int cause) {
showToast("GoogleApiClient connection suspended");
}
}
Except delete everything is working fine.
service.files().delete(fffid.getResourceId()).execute();
Any REST Api's .execute() (as well as GDAA's .await() flavored calls) must be run off UI thread. You should wrap it in:
new AsyncTask<Void, Void, Void>() {
#Override protected Integer doInBackground(String... params) {
//...
return null;
}
}.execute(); // .cancel(true);
or
new Thread(new Runnable() { #Override public void run() {
//....
}}).start();
Good Luck