تبدیل جیسون به متن ( URL Shortener )
سلام خدمت دوستان،
من در برنامم از URL Shortener API گوگل استفاده میکنم که به تازگی کدهاش دستخوش تغییرات شده و من کلا گیج شدم و نمیدونم باید چکار کنم :(
برنامه بدرستی کار میکنه و اطلاعات JSON رو در LogCat چاپ میکنه . منم میخوام قسمت مورد نظرم رو به عنوان متن روی TextView ست کنم ولی نمیدونم چجوری!
کلاس URL Shortener :
public class URLShortener {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public URLShortener() {
}
public JSONObject getJSONFromUrl(String address,String longUrl) {
// Making HTTP request
try {
// DefaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(address);
httpPost.setEntity(new StringEntity("{\"longUrl\":\""+ longUrl+"\"}"));
httpPost.setHeader("Content-Type", "application/json");
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();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// 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;
}
}
کلاس ActivityMain
public class MainActivity extends ActionBarActivity {
private Button btnGet;
private TextView shortUrl;
private EditText edtLongUrl;
private static final String ADDRESS = "https://www.googleapis.com/urlshortener/v1/url?key={API_KEY}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtLongUrl = (EditText) findViewById(R.id.edtUrl);
shortUrl = (TextView) findViewById(R.id.txtUrl);
btnGet = (Button) findViewById(R.id.btnUrl);
btnGet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new URLShort().execute();
}
});
}
private class URLShort extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
String longUrl;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Contacting Google Servers ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
longUrl = edtLongUrl.getText().toString();
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
URLShortener jParser = new URLShortener();
JSONObject json = jParser.getJSONFromUrl(ADDRESS, longUrl);
return json;
}
String ShortUrl;
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
if (json != null){
ShortUrl = json.getString("id");
shortUrl.setText(ShortUrl);
pDialog.dismiss();
}else{
shortUrl.setText("Network Error");
pDialog.dismiss();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
از راهنماییتون ممنونم .
08-16 11:18:41.849 17427-17487/ir.simorgh.urlshortner E/JSON﹕ {n "kind": "urlshortener#url",n "id": "http://goo.gl/IEr1d",n "longUrl": "http://iranapps.ir/"n}n
08-16 11:18:41.849 17427-17487/ir.simorgh.urlshortner E/JSON Parser﹕ Error parsing data org.json.JSONException: Expected ':' after n at character 4 of {n "kind": "urlshortener#url",n "id": "http://goo.gl/IEr1d",n "longUrl": "http://iranapps.ir/"n}n
برای مثال <
@Override protectedvoid onPostExecute(JSONObject json){ pDialog.dismiss(); try{ if(json !=null){ ShortUrl= json.getString("id"); shortUrl.setText(ShortUrl); pDialog.dismiss(); }else{ shortUrl.setText("Network Error"); pDialog.dismiss(); } }catch(JSONException e){ e.printStackTrace(); } }
توی این متد شما مقدار id رو دارید در ShortUrl ذخیره میکنید <
مقدار ShortUrl رو Log کنید < که مطمئن بشید کدها به درستی داره مقادیر رو دریافت میکنه
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
